From 9ae662f63e126212117f5add11fcd568f21b56ec Mon Sep 17 00:00:00 2001 From: Kevin Adametz Date: Tue, 1 Apr 2025 10:36:47 +0200 Subject: [PATCH] Updates to 03-2025 --- .env | 4 +- .idea/.gitignore | 3 - .idea/codeStyles/codeStyleConfig.xml | 5 - .../Laravel_30_07_20__14_22.xml | 3114 --------------- .../frameworkDescriptionVersion1.1.4.xsd | 47 - .idea/composerJson.xml | 10 - .idea/dataSources.xml | 11 - .idea/deployment.xml | 4 - .idea/encodings.xml | 6 - .idea/jsLinters/jshint.xml | 85 - .idea/laravel-plugin.xml | 6 - .idea/misc.xml | 6 - .idea/mivita.care.iml | 147 - .idea/modules.xml | 8 - .idea/php-test-framework.xml | 14 - .idea/php.xml | 148 - .idea/symfony2.xml | 8 - .idea/vcs.xml | 6 - .idea/workspace.xml | 627 --- .phpstorm.meta.php | 22 +- _ide_helper.php | 224 +- _ide_helper_models.php | 82 +- _todo.txt | 3 + app/Console/Commands/BusinessStore.php | 106 +- app/Console/Commands/SubDomains.php | 664 ++++ app/Console/Commands/SyncShoppingUserData.php | 129 + app/Console/Commands/UserMakeAboOrder.php | 292 ++ app/Console/Commands/UserRestore.php | 2 +- app/Cron/UserMakeOrder.php | 203 + app/Http/Controllers/Admin/AboController.php | 151 + app/Http/Controllers/Api/KasController.php | 4 +- app/Http/Controllers/Api/KasSLLController.php | 68 +- app/Http/Controllers/Api/PayoneController.php | 131 +- .../Api/ShoppingUserController.php | 2 +- app/Http/Controllers/BusinessController.php | 233 +- app/Http/Controllers/CronController.php | 331 +- app/Http/Controllers/CustomerController.php | 2 +- app/Http/Controllers/FileController.php | 2 +- .../Controllers/ImportProductController.php | 8 +- app/Http/Controllers/IngredientController.php | 2 +- app/Http/Controllers/LeadController.php | 3 + app/Http/Controllers/ModalController.php | 19 +- app/Http/Controllers/Pay/PayoneController.php | 135 +- .../Controllers/PaymentCreditController.php | 137 +- .../Controllers/PaymentInvoiceController.php | 50 +- .../Controllers/PaymentPointsController.php | 56 +- app/Http/Controllers/SalesController.php | 26 +- app/Http/Controllers/User/AboController.php | 322 ++ .../Controllers/User/CustomerController.php | 45 +- .../Controllers/User/MembershipController.php | 35 +- app/Http/Controllers/User/OrderController.php | 1066 +++-- .../Controllers/User/OrderController_bak.php | 674 ++++ .../User/OrderPaymentController.php | 97 + .../Controllers/User/PaymentController.php | 7 +- .../Controllers/User/ShopApiController.php | 2 +- .../Controllers/User/ShopSalesController.php | 4 +- app/Http/Controllers/User/TeamController.php | 92 +- app/Http/Controllers/UserDataController.php | 3 + app/Http/Controllers/Web/CardController.php | 4 +- .../Controllers/Web/CheckoutController.php | 1050 +++-- app/Http/Controllers/WizardController.php | 7 +- app/Http/Middleware/Checkout.php | 2 +- app/Mail/MailCheckout.php | 5 +- app/Mail/MailCustomPaymet.php | 11 +- app/Models/Category.php | 2 +- app/Models/DbipLookup.php | 11 +- app/Models/DbipLookup2.php | 11 +- app/Models/DbipLookup3.php | 11 +- app/Models/DcCategory.php | 19 +- app/Models/DcFile.php | 22 +- app/Models/DcFileTag.php | 13 +- app/Models/DcTag.php | 22 +- app/Models/Homeparty.php | 2 + app/Models/IqImage.php | 2 +- app/Models/IqSite.php | 11 +- app/Models/PaymentMethod.php | 2 + app/Models/Product.php | 38 +- app/Models/ProductImage.php | 2 +- app/Models/Setting.php | 2 +- app/Models/ShoppingCollectOrder.php | 30 +- app/Models/ShoppingInstance.php | 31 +- app/Models/ShoppingOrder.php | 11 + app/Models/ShoppingOrderItem.php | 10 + app/Models/ShoppingPayment.php | 14 +- app/Models/ShoppingUser.php | 7 +- app/Models/SySetting.php | 2 +- app/Models/UserAbo.php | 129 +- app/Models/UserAboItem.php | 90 + app/Models/UserAboOrder.php | 51 +- app/Models/UserBusiness.php | 4 + app/Models/UserCreditItem.php | 4 + app/Models/UserHistory.php | 2 + app/Models/UserShop.php | 4 +- app/Models/UserShopOnSite.php | 2 +- app/Policies/AppServiceProvider.php | 72 - app/Repositories/AboRepository.php | 89 + app/Repositories/CheckoutRepository.php | 376 ++ app/Repositories/DC/FileRepository.php | 262 +- app/Repositories/FileRepository.php | 42 - app/Repositories/ProductRepository.php | 2 +- app/Services/AboHelper.php | 158 +- app/Services/AboOrderCart.php | 201 + app/Services/BusinessPlan/ExportBot.php | 71 +- .../BusinessPlan/SalesPointsVolumeHelper.php | 50 +- app/Services/CustomerPriority.php | 8 +- app/Services/HTMLHelper.php | 19 +- app/Services/OrderPaymentService.php | 180 + app/Services/Payment.php | 40 +- app/Services/PaymentHelper.php | 2 +- app/Services/Shop.php | 415 +- app/Services/ShoppingUserService.php | 198 + app/Services/Slim.php | 4 +- app/Services/SyS/ShoppingOrders.php | 3 +- app/Services/Util.php | 41 +- app/User.php | 219 +- app/helpers.php | 20 + bootstrap/cache/packages.php | 37 +- bootstrap/cache/services.php | 82 +- composer.json | 6 +- composer.lock | 3441 ++++++++++------- config/app.php | 12 +- config/image.php | 20 - cron_script_local.sh | 6 +- cron_script_server.sh | 7 +- ..._163832_create_shopping_payments_table.php | 3 + ...24_07_29_144455_create_user_abos_table.php | 16 +- ..._17_161306_create_user_abo_items_table.php | 49 + mivita.code-workspace | 4 +- packages/shoppingcart/.gitignore | 5 - packages/shoppingcart/.travis.yml | 10 - packages/shoppingcart/CanBeBought.php | 43 - packages/shoppingcart/Cart.php | 686 ---- packages/shoppingcart/CartItem.php | 386 -- packages/shoppingcart/CartItemOptions.php | 19 - packages/shoppingcart/Contracts/Buyable.php | 27 - .../Contracts/InstanceIdentifier.php | 21 - .../Exceptions/CartAlreadyStoredException.php | 7 - .../Exceptions/InvalidRowIDException.php | 7 - .../Exceptions/UnknownModelException.php | 7 - packages/shoppingcart/Facades/Cart.php | 16 - .../ShoppingcartServiceProvider.php | 41 - packages/shoppingcart/_info/LICENSE | 21 - packages/shoppingcart/_info/README.md | 477 --- packages/shoppingcart/_info/_composer.json | 51 - packages/shoppingcart/_info/phpunit.xml | 17 - .../_info/tests/CartAssertions.php | 35 - .../shoppingcart/_info/tests/CartItemTest.php | 55 - .../shoppingcart/_info/tests/CartTest.php | 945 ----- .../_info/tests/Fixtures/BuyableProduct.php | 67 - .../_info/tests/Fixtures/ProductModel.php | 13 - packages/shoppingcart/config/cart.php | 67 - ...0_00_000000_create_shopping_cart_table.php | 30 - public/assets/css/custom-style.css | 4 +- public/assets/images/logo_dark.png | Bin 57184 -> 56787 bytes public/assets/images/logo_dark_old.png | Bin 6874 -> 11845 bytes public/assets/images/logo_mivita.png | Bin 6874 -> 16948 bytes public/assets/images/logo_mivita_fixed.png | Bin 5438 -> 11845 bytes public/assets/images/produktfamilie.jpg | Bin 112999 -> 140657 bytes .../assets/images/slider-hg_gruen-mitte.jpg | Bin 126670 -> 123864 bytes public/assets/plugins/text-rotator/demo.html | 2 +- public/images/logo_mivita.png | Bin 9194 -> 16948 bytes public/js/iq-abo-cart.js | 201 + public/js/iq-modal-cart.js | 181 + resources/lang/de.json | 1 + resources/lang/de/abo.php | 65 + resources/lang/de/actions.php | 2 +- resources/lang/de/email.php | 4 +- resources/lang/de/membership.php | 6 +- resources/lang/de/navigation.php | 7 + resources/lang/de/order.php | 26 +- resources/lang/de/payment.php | 21 +- resources/lang/de/tables.php | 18 +- resources/lang/de/team.php | 2 +- resources/lang/en/abo.php | 40 + resources/lang/en/membership.php | 4 +- resources/lang/es/abo.php | 40 + resources/lang/es/cal.php | 2 +- resources/lang/es/homeparty.php | 20 +- resources/lang/es/membership.php | 4 +- resources/lang/es/validation.php | 4 +- resources/lang/es/website.php | 6 +- resources/views/admin/abo/_detail.blade.php | 109 + .../views/admin/abo/_executions.blade.php | 109 + .../views/admin/abo/_order_abo.blade.php | 123 + .../views/admin/abo/_order_abo_show.blade.php | 93 + resources/views/admin/abo/detail.blade.php | 61 + resources/views/admin/abo/index.blade.php | 118 + .../admin/abo/modal_abo_update.blade.php | 88 + .../views/admin/category/products.blade.php | 2 +- .../admin/customer/_customer_detail.blade.php | 4 + .../views/admin/customer/_detail.blade.php | 55 +- .../admin/modal/show_user_customers.blade.php | 9 +- .../admin/payment/credit_detail.blade.php | 186 +- .../admin/payment_method/index.blade.php | 4 +- resources/views/admin/product/index.blade.php | 2 +- .../admin/sales/_detail_collection.blade.php | 8 +- .../sales/_detail_shopping_order.blade.php | 13 +- .../views/admin/sales/customers.blade.php | 1 - .../views/admin/settings/index.blade.php | 2 +- resources/views/emails/checkout.blade.php | 549 +-- .../views/emails/checkout_status.blade.php | 59 +- .../views/emails/collection_detail.blade.php | 2 +- .../emails/custom_payment_detail.blade.php | 2 +- .../layouts/includes/layout-sidenav.blade.php | 47 +- resources/views/pdf/credit_details.blade.php | 198 +- .../views/pdf/credit_details_long.blade.php | 171 +- resources/views/pdf/delivery-detail.blade.php | 2 +- .../pdf/delivery-homeparty-detail.blade.php | 2 +- .../views/pdf/invoice-collection.blade.php | 6 +- resources/views/pdf/invoice-detail.blade.php | 4 +- .../pdf/invoice-homeparty-detail.blade.php | 2 +- .../pdf/invoice-journal-collection.blade.php | 2 +- resources/views/user/abo/_bak_index.blade.php | 130 + resources/views/user/abo/detail.blade.php | 65 + resources/views/user/abo/index.blade.php | 130 + .../abo/modal_abo_show_products.blade.php | 60 + resources/views/user/abo/vat_info.blade.php | 28 + .../modal_hp_show_products.blade.php | 71 + .../views/user/membership/index.blade.php | 70 +- .../order/_list_delivery_vat_info.blade.php | 14 +- .../views/user/order/comp_product.blade.php | 47 +- .../views/user/order/custom_payment.blade.php | 24 +- resources/views/user/order/delivery.blade.php | 110 +- resources/views/user/order/index.blade.php | 1 - resources/views/user/order/list.blade.php | 3 +- resources/views/user/order/list_me.blade.php | 4 +- .../user/order/list_ot-customer.blade.php | 4 +- .../views/user/order/list_ot-member.blade.php | 4 +- .../order/payment/custom_payment.blade.php | 282 ++ .../views/user/order/payment/index.blade.php | 55 + .../views/user/order/shipping_ot.blade.php | 2 +- .../views/user/order/yard_view_form.blade.php | 34 +- .../shop/sales/api_order_list_total.blade.php | 4 +- resources/views/user/team/export.blade.php | 2 + resources/views/user/user_form.blade.php | 12 +- .../translation/languages/index.blade.php | 2 +- .../views/web/layouts/application.blade.php | 1 + .../web/templates/_bcategories.blade.php | 4 +- ...blade.php => _existenzgruendung.blade.php} | 0 .../web/templates/checkout-is-final.blade.php | 111 + .../views/web/templates/checkout.blade.php | 71 +- .../web/user/layouts/application.blade.php | 1 + routes/web.php | 18 +- 243 files changed, 12580 insertions(+), 12018 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/codeStyles/codeStyleConfig.xml delete mode 100644 .idea/commandlinetools/Laravel_30_07_20__14_22.xml delete mode 100644 .idea/commandlinetools/schemas/frameworkDescriptionVersion1.1.4.xsd delete mode 100644 .idea/composerJson.xml delete mode 100644 .idea/dataSources.xml delete mode 100644 .idea/deployment.xml delete mode 100644 .idea/encodings.xml delete mode 100644 .idea/jsLinters/jshint.xml delete mode 100644 .idea/laravel-plugin.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/mivita.care.iml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/php-test-framework.xml delete mode 100644 .idea/php.xml delete mode 100644 .idea/symfony2.xml delete mode 100644 .idea/vcs.xml delete mode 100644 .idea/workspace.xml create mode 100644 app/Console/Commands/SubDomains.php create mode 100644 app/Console/Commands/SyncShoppingUserData.php create mode 100644 app/Console/Commands/UserMakeAboOrder.php create mode 100644 app/Cron/UserMakeOrder.php create mode 100644 app/Http/Controllers/Admin/AboController.php create mode 100644 app/Http/Controllers/User/AboController.php create mode 100644 app/Http/Controllers/User/OrderController_bak.php create mode 100644 app/Http/Controllers/User/OrderPaymentController.php create mode 100644 app/Models/UserAboItem.php delete mode 100755 app/Policies/AppServiceProvider.php create mode 100644 app/Repositories/AboRepository.php create mode 100644 app/Repositories/CheckoutRepository.php create mode 100644 app/Services/AboOrderCart.php create mode 100644 app/Services/OrderPaymentService.php create mode 100644 app/Services/ShoppingUserService.php delete mode 100644 config/image.php create mode 100644 database/migrations/2024_10_17_161306_create_user_abo_items_table.php delete mode 100644 packages/shoppingcart/.gitignore delete mode 100644 packages/shoppingcart/.travis.yml delete mode 100644 packages/shoppingcart/CanBeBought.php delete mode 100644 packages/shoppingcart/Cart.php delete mode 100644 packages/shoppingcart/CartItem.php delete mode 100644 packages/shoppingcart/CartItemOptions.php delete mode 100644 packages/shoppingcart/Contracts/Buyable.php delete mode 100644 packages/shoppingcart/Contracts/InstanceIdentifier.php delete mode 100644 packages/shoppingcart/Exceptions/CartAlreadyStoredException.php delete mode 100644 packages/shoppingcart/Exceptions/InvalidRowIDException.php delete mode 100644 packages/shoppingcart/Exceptions/UnknownModelException.php delete mode 100644 packages/shoppingcart/Facades/Cart.php delete mode 100644 packages/shoppingcart/ShoppingcartServiceProvider.php delete mode 100644 packages/shoppingcart/_info/LICENSE delete mode 100644 packages/shoppingcart/_info/README.md delete mode 100644 packages/shoppingcart/_info/_composer.json delete mode 100644 packages/shoppingcart/_info/phpunit.xml delete mode 100644 packages/shoppingcart/_info/tests/CartAssertions.php delete mode 100644 packages/shoppingcart/_info/tests/CartItemTest.php delete mode 100644 packages/shoppingcart/_info/tests/CartTest.php delete mode 100644 packages/shoppingcart/_info/tests/Fixtures/BuyableProduct.php delete mode 100644 packages/shoppingcart/_info/tests/Fixtures/ProductModel.php delete mode 100644 packages/shoppingcart/config/cart.php delete mode 100644 packages/shoppingcart/database/migrations/0000_00_00_000000_create_shopping_cart_table.php create mode 100644 public/js/iq-abo-cart.js create mode 100644 public/js/iq-modal-cart.js create mode 100644 resources/lang/de/abo.php create mode 100644 resources/lang/en/abo.php create mode 100644 resources/lang/es/abo.php create mode 100644 resources/views/admin/abo/_detail.blade.php create mode 100644 resources/views/admin/abo/_executions.blade.php create mode 100644 resources/views/admin/abo/_order_abo.blade.php create mode 100644 resources/views/admin/abo/_order_abo_show.blade.php create mode 100644 resources/views/admin/abo/detail.blade.php create mode 100644 resources/views/admin/abo/index.blade.php create mode 100644 resources/views/admin/abo/modal_abo_update.blade.php create mode 100644 resources/views/user/abo/_bak_index.blade.php create mode 100644 resources/views/user/abo/detail.blade.php create mode 100644 resources/views/user/abo/index.blade.php create mode 100644 resources/views/user/abo/modal_abo_show_products.blade.php create mode 100644 resources/views/user/abo/vat_info.blade.php create mode 100644 resources/views/user/homeparty/modal_hp_show_products.blade.php create mode 100644 resources/views/user/order/payment/custom_payment.blade.php create mode 100644 resources/views/user/order/payment/index.blade.php rename resources/views/web/templates/{existenzgruendung.blade.php => _existenzgruendung.blade.php} (100%) create mode 100644 resources/views/web/templates/checkout-is-final.blade.php diff --git a/.env b/.env index 3e8c1fb..4fdce59 100644 --- a/.env +++ b/.env @@ -22,12 +22,14 @@ APP_CHECKOUT_TEST_MAIL=kevin.adametz@me.com APP_INFO_TEST_MAIL=kevin.adametz@me.com EXCEPTION_MAIL=exception@adametz.media +APP_MODE=test + APP_IPINFO=true APP_MAIN_TAX=1.19 APP_MAIN_TAX_RATE=19 -APP_PHP_VERSION=7.4 +APP_PHP_VERSION=8.2 LOG_CHANNEL=stack diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 5d69316..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Datasource local storage ignored files -/dataSources.local.xml -/dataSources/ diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index a55e7a1..0000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/commandlinetools/Laravel_30_07_20__14_22.xml b/.idea/commandlinetools/Laravel_30_07_20__14_22.xml deleted file mode 100644 index e5c4e92..0000000 --- a/.idea/commandlinetools/Laravel_30_07_20__14_22.xml +++ /dev/null @@ -1,3114 +0,0 @@ - - - - - clear-compiled -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - down -
Options:
--messageThe message for the maintenance mode
--retryThe number of seconds after which the request may be retried
--allowIP or networks allowed to access the application while in maintenance mode
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - - -
- - env -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - help - help command displays help for a given command:

php /Volumes/Websites/mivita.care/artisan help list

You can also output the help in other formats by using the --format option:

php /Volumes/Websites/mivita.care/artisan help --format=xml list

To display the list of available commands, please use the list command.

Options:
--formatThe output format (txt, xml, json, or md)
--rawTo output raw command help
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- command_name[=null] - - - - - - - - - - - - -
- - inspire -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - list - list command lists all commands:

php /Volumes/Websites/mivita.care/artisan list

You can also display the commands for a specific namespace:

php /Volumes/Websites/mivita.care/artisan list test

You can also output the information in other formats by using the --format option:

php /Volumes/Websites/mivita.care/artisan list --format=xml

It's also possible to get raw list of commands (useful for embedding command runner):

php /Volumes/Websites/mivita.care/artisan list --raw

Options:
--rawTo output raw command list
--formatThe output format (txt, xml, json, or md)

]]>
- namespace[=null] - - - - -
- - migrate -
Options:
--databaseThe database connection to use
--forceForce the operation to run when in production
--pathThe path(s) to the migrations files to be executed
--realpathIndicate any provided migration file paths are pre-resolved absolute paths
--pretendDump the SQL queries that would be run
--seedIndicates if the seed task should be re-run
--stepForce the migrations to be run so they can be rolled back individually
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - - - - - - -
- - optimize -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - preset -
Options:
--optionPass an option to the preset command
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- type - - - - - - - - - - - -
- - serve -
Options:
--hostThe host address to serve the application on
--portThe port to serve the application on
--triesThe max number of ports to attempt to serve from
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - - -
- - tinker -
Options:
--executeExecute the given code using Tinker
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- include[=null] - - - - - - - - - - - -
- - up -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - auth:clear-resets -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name[=null] - - - - - - - - - - -
- - cache:clear -
Options:
--tagsThe cache tags you would like to clear
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- store[=null] - - - - - - - - - - - -
- - cache:forget -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- key store[=null] - - - - - - - - - - -
- - cache:table -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - code:models -
Options:
--schema(-s)The name of the MySQL database
--connection(-c)The name of the connection
--table(-t)The name of the table
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - - -
- - config:cache -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - config:clear -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - db:seed -
Options:
--classThe class name of the root seeder
--databaseThe database connection to seed
--forceForce the operation to run when in production
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - - -
- - db:wipe -
Options:
--databaseThe database connection to use
--drop-viewsDrop all tables and views
--drop-typesDrop all tables and types (Postgres only)
--forceForce the operation to run when in production
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - - - -
- - debugbar:clear -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - event:cache -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - event:clear -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - event:generate -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - event:list -
Options:
--eventFilter the events by name
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - -
- - ide-helper:eloquent -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - ide-helper:generate -
Options:
--format(-F)The format for the IDE Helper
--write_mixins(-W)Write mixins to Laravel Model?
--helpers(-H)Include the helper files
--memory(-M)Use sqlite memory driver
--sublime(-S)DEPRECATED: Use different style for SublimeText CodeIntel
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- filename[=null] - - - - - - - - - - - - - - - -
- - ide-helper:meta -
Options:
--filename(-F)The path to the meta file
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - -
- - ide-helper:models -
Options:
--filename(-F)The path to the helper file
--dir(-D)The model dir
--write(-W)Write to Model file
--nowrite(-N)Don't write to Model file
--reset(-R)Remove the original phpdocs instead of appending
--smart-reset(-r)Refresh the properties/methods list, but keep the text
--phpstorm-noinspections(-p)Add PhpFullyQualifiedNameUsageInspection and PhpUnnecessaryFullyQualifiedNameInspection PHPStorm noinspection tags
--ignore(-I)Which models to ignore
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- model[=null] - - - - - - - - - - - - - - - - - - -
- - key:generate -
Options:
--showDisplay the key instead of modifying files
--forceForce the operation to run when in production
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - -
- - make:channel -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - -
- - make:command -
Options:
--commandThe terminal command that should be assigned
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - - -
- - make:controller -
Options:
--apiExclude the create and edit methods from the controller.
--forceCreate the class even if the controller already exists
--invokable(-i)Generate a single method, invokable controller class.
--model(-m)Generate a resource controller for the given model.
--parent(-p)Generate a nested resource controller class.
--resource(-r)Generate a resource controller class.
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - - - - - - - -
- - make:event -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - -
- - make:exception -
Options:
--renderCreate the exception with an empty render method
--reportCreate the exception with an empty report method
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - - - -
- - make:export -
Options:
--model(-m)Generate an export for the given model.
--queryGenerate an export for a query.
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - - - -
- - make:factory -
Options:
--model(-m)The name of the model
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - - -
- - make:import -
Options:
--model(-m)Generate an import for the given model.
--queryGenerate an import for a query.
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - - - -
- - make:job -
Options:
--syncIndicates that job should be synchronous
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - - -
- - make:listener -
Options:
--event(-e)The event class being listened for
--queuedIndicates the event listener should be queued
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - - - -
- - make:mail -
Options:
--force(-f)Create the class even if the mailable already exists
--markdown(-m)Create a new Markdown template for the mailable
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - - - -
- - make:middleware -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - -
- - make:migration -
Options:
--createThe table to be created
--tableThe table to migrate
--pathThe location where the migration file should be created
--realpathIndicate any provided migration file paths are pre-resolved absolute paths
--fullpathOutput the full path of the migration
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - - - - - - -
- - make:model -
Options:
--all(-a)Generate a migration, seeder, factory, and resource controller for the model
--controller(-c)Create a new controller for the model
--factory(-f)Create a new factory for the model
--forceCreate the class even if the model already exists
--migration(-m)Create a new migration file for the model
--seed(-s)Create a new seeder file for the model
--pivot(-p)Indicates if the generated model should be a custom intermediate table model
--resource(-r)Indicates if the generated controller should be a resource controller
--apiIndicates if the generated controller should be an API controller
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - - - - - - - - - - -
- - make:notification -
Options:
--force(-f)Create the class even if the notification already exists
--markdown(-m)Create a new Markdown template for the notification
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - - - -
- - make:observer -
Options:
--model(-m)The model that the observer applies to.
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - - -
- - make:policy -
Options:
--model(-m)The model that the policy applies to
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - - -
- - make:provider -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - -
- - make:request -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - -
- - make:resource -
Options:
--collection(-c)Create a resource collection
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - - -
- - make:rule -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - -
- - make:seeder -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - -
- - make:test -
Options:
--unitCreate a unit test
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- name - - - - - - - - - - - -
- - migrate:fresh -
Options:
--databaseThe database connection to use
--drop-viewsDrop all tables and views
--drop-typesDrop all tables and types (Postgres only)
--forceForce the operation to run when in production
--pathThe path(s) to the migrations files to be executed
--realpathIndicate any provided migration file paths are pre-resolved absolute paths
--seedIndicates if the seed task should be re-run
--seederThe class name of the root seeder
--stepForce the migrations to be run so they can be rolled back individually
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - - - - - - - - -
- - migrate:install -
Options:
--databaseThe database connection to use
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - -
- - migrate:refresh -
Options:
--databaseThe database connection to use
--forceForce the operation to run when in production
--pathThe path(s) to the migrations files to be executed
--realpathIndicate any provided migration file paths are pre-resolved absolute paths
--seedIndicates if the seed task should be re-run
--seederThe class name of the root seeder
--stepThe number of migrations to be reverted & re-run
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - - - - - - -
- - migrate:reset -
Options:
--databaseThe database connection to use
--forceForce the operation to run when in production
--pathThe path(s) to the migrations files to be executed
--realpathIndicate any provided migration file paths are pre-resolved absolute paths
--pretendDump the SQL queries that would be run
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - - - - -
- - migrate:rollback -
Options:
--databaseThe database connection to use
--forceForce the operation to run when in production
--pathThe path(s) to the migrations files to be executed
--realpathIndicate any provided migration file paths are pre-resolved absolute paths
--pretendDump the SQL queries that would be run
--stepThe number of migrations to be reverted
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - - - - - -
- - migrate:status -
Options:
--databaseThe database connection to use
--pathThe path(s) to the migrations files to use
--realpathIndicate any provided migration file paths are pre-resolved absolute paths
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - - -
- - notifications:table -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - optimize:clear -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - package:discover -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - passport:client -
Options:
--personalCreate a personal access token client
--passwordCreate a password grant client
--clientCreate a client credentials grant client
--nameThe name of the client
--providerThe name of the user provider
--redirect_uriThe URI to redirect to after authorization
--user_idThe user ID the client should be assigned to
--publicCreate a public client (Auth code grant type only)
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - - - - - - - -
- - passport:hash -
Options:
--forceForce the operation to run without confirmation prompt
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - -
- - passport:install -
Options:
--uuidsUse UUIDs for all client IDs
--forceOverwrite keys they already exist
--lengthThe length of the private key
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - - -
- - passport:keys -
Options:
--forceOverwrite keys they already exist
--lengthThe length of the private key
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - -
- - passport:purge -
Options:
--revokedOnly purge revoked tokens and authentication codes
--expiredOnly purge expired tokens and authentication codes
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - -
- - queue:failed -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - queue:failed-table -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - queue:flush -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - queue:forget -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- id - - - - - - - - - - -
- - queue:listen -
Options:
--delayThe number of seconds to delay failed jobs
--forceForce the worker to run even in maintenance mode
--memoryThe memory limit in megabytes
--queueThe queue to listen on
--sleepNumber of seconds to sleep when no job is available
--timeoutThe number of seconds a child process can run
--triesNumber of times to attempt a job before logging it failed
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- connection[=null] - - - - - - - - - - - - - - - - - -
- - queue:restart -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - queue:retry -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- id - - - - - - - - - - -
- - queue:table -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - queue:work -
Options:
--queueThe names of the queues to work
--daemonRun the worker in daemon mode (Deprecated)
--onceOnly process the next job on the queue
--stop-when-emptyStop when the queue is empty
--delayThe number of seconds to delay failed jobs
--forceForce the worker to run even in maintenance mode
--memoryThe memory limit in megabytes
--sleepNumber of seconds to sleep when no job is available
--timeoutThe number of seconds a child process can run
--triesNumber of times to attempt a job before logging it failed
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- connection[=null] - - - - - - - - - - - - - - - - - - - - -
- - route:cache -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - route:clear -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - route:list -
Options:
--columnsColumns to include in the route table
--compact(-c)Only show method, URI and action columns
--jsonOutput the route list as JSON
--methodFilter the routes by method
--nameFilter the routes by name
--pathFilter the routes by path
--reverse(-r)Reverse the ordering of the routes
--sortThe column (domain, method, uri, name, action, middleware) to sort by
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - - - - - - - -
- - schedule:finish -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- id code[=null] - - - - - - - - - - -
- - schedule:run -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - session:table -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - storage:link -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - vendor:publish -
Options:
--forceOverwrite any existing files
--allPublish assets for all service providers without prompt
--providerThe service provider that has assets you want to publish
--tagOne or many tags that have assets you want to publish
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - - - - - -
- - view:cache -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
- - view:clear -
Options:
--help(-h)Display this help message
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce ANSI output
--no-ansiDisable ANSI output
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
- - - - - - - - - - -
-
- diff --git a/.idea/commandlinetools/schemas/frameworkDescriptionVersion1.1.4.xsd b/.idea/commandlinetools/schemas/frameworkDescriptionVersion1.1.4.xsd deleted file mode 100644 index f2efc6d..0000000 --- a/.idea/commandlinetools/schemas/frameworkDescriptionVersion1.1.4.xsd +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.idea/composerJson.xml b/.idea/composerJson.xml deleted file mode 100644 index 1b07430..0000000 --- a/.idea/composerJson.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml deleted file mode 100644 index 1e7ac65..0000000 --- a/.idea/dataSources.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - mysql.8 - true - com.mysql.cj.jdbc.Driver - jdbc:mysql://localhost:3306/mivita - - - \ No newline at end of file diff --git a/.idea/deployment.xml b/.idea/deployment.xml deleted file mode 100644 index cc02949..0000000 --- a/.idea/deployment.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 97626ba..0000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/jsLinters/jshint.xml b/.idea/jsLinters/jshint.xml deleted file mode 100644 index 9a6f965..0000000 --- a/.idea/jsLinters/jshint.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/laravel-plugin.xml b/.idea/laravel-plugin.xml deleted file mode 100644 index 5aae25d..0000000 --- a/.idea/laravel-plugin.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 28a804d..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/mivita.care.iml b/.idea/mivita.care.iml deleted file mode 100644 index 518b499..0000000 --- a/.idea/mivita.care.iml +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index dc3e998..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/php-test-framework.xml b/.idea/php-test-framework.xml deleted file mode 100644 index 8f691a4..0000000 --- a/.idea/php-test-framework.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml deleted file mode 100644 index 08699a1..0000000 --- a/.idea/php.xml +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/symfony2.xml b/.idea/symfony2.xml deleted file mode 100644 index e3f946c..0000000 --- a/.idea/symfony2.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index ac59790..0000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,627 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $PROJECT_DIR$/composer.json - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '; - - })*/ ->addColumn('picture', function (Product $product) { if(count($product->images)){ return ''; @@ -477,200 +676,289 @@ class OrderController extends Controller ->orderColumn('my_commission_net', 'price $1') ->orderColumn('contents_total', 'contents_total $1') ->orderColumn('weight', 'weight $1') - - ->rawColumns(['add_card', 'price_net', 'price_gross', 'price_vk_gross', 'customer_price_net', 'customer_price_gross', 'my_commission_net', 'product', 'quantity', 'picture', 'action']) + ->orderColumn('abo', 'show_on $1') + ->rawColumns(['add_card', 'price_net', 'price_gross', 'price_vk_gross', 'customer_price_net', 'customer_price_gross', 'my_commission_net', 'product', 'quantity', 'picture', 'abo', 'action']) ->make(true); } - - public function performRequest(){ - - if(Request::ajax()) { - $data = Request::all(); - - $is_for = isset($data['shipping_is_for']) ? $data['shipping_is_for'] : 'ot-member'; - $data['for'] = $is_for; - $data['comp_products'] = $this->getCompProducts($is_for); - - if($data['action'] === 'updateCart' && isset($data['product_id'])){ - if($product = Product::find($data['product_id'])){ - $image = ""; - if($product->images->count()){ - $image = $product->images->first()->slug; - } - - //get the card item - if($is_for === 'ot-customer' || $is_for === 'abo-ot-customer'){ - $cartItem = Yard::instance('shopping') - ->add($product->id, $product->getLang('name'), 1, - round($product->getPriceWith(Yard::instance('shopping')->getUserTaxFree(), false, Yard::instance('shopping')->getUserCountry()), 1), false, false, - ['image' => $image, 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points, 'no_commission' => $product->no_commission]); - }else{ - $cartItem = Yard::instance('shopping') - ->add($product->id, $product->getLang('name'), 1, - $product->getPriceWith(Yard::instance('shopping')->getUserTaxFree(), true, Yard::instance('shopping')->getUserCountry()), false, false, - ['image' => $image, 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points, 'no_commission' => $product->no_commission]); - } - if(Yard::instance('shopping')->getUserTaxFree()){ - Yard::setTax($cartItem->rowId, 0); - }else{ - Yard::setTax($cartItem->rowId, $product->getTaxWith(Yard::instance('shopping')->getUserCountry())); - } - if(isset($data['qty']) && $data['qty'] > 0){ - Yard::instance('shopping')->update($cartItem->rowId, $data['qty']); - }else{ - //if 0 get the item by qty:1 and remove it - Yard::instance('shopping')->remove($cartItem->rowId); - } - Yard::instance('shopping')->reCalculateShippingPrice(); - $this->checkCompProduct(Yard::instance('shopping')->getNumComp()); - $html_card = view("user.order.yard_view_form", $data)->render(); - $html_comp = view("user.order.comp_product", $data)->render(); - - return response()->json(['response' => true, 'data'=>$data, 'html_card'=>$html_card, 'html_comp'=>$html_comp]); - } - } - if($data['action'] === 'clearCart') { - Yard::instance('shopping')->destroy(); - return response()->json(['response' => true, 'data'=>Yard::instance('shopping')->count(), 'html_card'=>'', 'html_comp'=>'']); - - } - - if($data['action'] === 'updateShippingCountry') { - if(isset($data['shipping_country_id'])){ - if($shipping_country = ShippingCountry::find($data['shipping_country_id'])){ - Yard::instance('shopping')->setShippingCountryWithPrice($shipping_country->id, $is_for); - $this->checkCompProduct(Yard::instance('shopping')->getNumComp()); - } - } - $html_card = view("user.order.yard_view_form", $data)->render(); - $html_comp = view("user.order.comp_product", $data)->render(); - return response()->json(['response' => true, 'data'=>$data, 'html_card'=>$html_card, 'html_comp'=>$html_comp]); - - } - if($data['action'] === 'updateCompProduct'){ - // $data['comp_product_id'] - // $data['comp_num'] - //count_comp_products - $this->updateCompProduct($data); - Yard::instance('shopping')->reCalculateShippingPrice(); - $html_card = view("user.order.yard_view_form", $data)->render(); - $html_comp = view("user.order.comp_product", $data)->render(); - - return response()->json(['response' => true, 'data'=>$data, 'html_card'=>$html_card, 'html_comp'=>$html_comp]); - - } - return response()->json(['response' => false, 'data'=>$data]); + /** + * Handle AJAX requests for cart operations + */ + public function performRequest() + { + if (!Request::ajax()) { + Log::channel(self::LOG_CHANNEL)->warning("Non-AJAX request to performRequest method"); + return response()->json(['response' => false, 'message' => 'Only AJAX requests are allowed']); } + + $data = Request::all(); + $is_for = isset($data['shipping_is_for']) ? $data['shipping_is_for'] : 'ot-member'; + $data['for'] = $is_for; + $data['comp_products'] = Shop::getCompProducts($is_for); + + Log::channel(self::LOG_CHANNEL)->info("Performing cart action", [ + 'action' => $data['action'] ?? 'unknown', + 'is_for' => $is_for + ]); + + if ($data['action'] === 'updateCart' && isset($data['product_id'])) { + return $this->handleUpdateCart($data, $is_for); + } + + if ($data['action'] === 'clearCart') { + Yard::instance('shopping')->destroy(); + Log::channel(self::LOG_CHANNEL)->info("Cart cleared"); + return response()->json(['response' => true, 'data' => Yard::instance('shopping')->count(), 'html_card' => '', 'html_comp' => '']); + } + + if ($data['action'] === 'updateShippingCountry') { + return $this->handleUpdateShippingCountry($data, $is_for); + } + + if ($data['action'] === 'updateCompProduct') { + return $this->handleUpdateCompProduct($data, $is_for); + } + + Log::channel(self::LOG_CHANNEL)->warning("Unknown action in performRequest", ['action' => $data['action'] ?? 'not set']); + return response()->json(['response' => false, 'data' => $data]); } - private function checkCompProduct($count_comp_products){ + /** + * Handle updating cart items + */ + private function handleUpdateCart($data, $is_for) + { + $product = Product::find($data['product_id']); + if (!$product) { + Log::channel(self::LOG_CHANNEL)->warning("Product not found for cart update", ['product_id' => $data['product_id']]); + return response()->json(['response' => false, 'message' => 'Product not found']); + } + + $image = ""; + if ($product->images->count()) { + $image = $product->images->first()->slug; + } + + // Get the cart item + if ($is_for === 'ot-customer' || $is_for === 'abo-ot-customer') { + $cartItem = Yard::instance('shopping') + ->add($product->id, $product->getLang('name'), 1, + round($product->getPriceWith(Yard::instance('shopping')->getUserTaxFree(), false, Yard::instance('shopping')->getUserCountry()), 1), false, false, + ['image' => $image, 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points, 'no_commission' => $product->no_commission, 'show_on' => $product->show_on]); + } else { + $cartItem = Yard::instance('shopping') + ->add($product->id, $product->getLang('name'), 1, + $product->getPriceWith(Yard::instance('shopping')->getUserTaxFree(), true, Yard::instance('shopping')->getUserCountry()), false, false, + ['image' => $image, 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points, 'no_commission' => $product->no_commission, 'show_on' => $product->show_on]); + } + + if (Yard::instance('shopping')->getUserTaxFree()) { + Yard::setTax($cartItem->rowId, 0); + } else { + Yard::setTax($cartItem->rowId, $product->getTaxWith(Yard::instance('shopping')->getUserCountry())); + } + + if (isset($data['qty']) && $data['qty'] > 0) { + Yard::instance('shopping')->update($cartItem->rowId, $data['qty']); + Log::channel(self::LOG_CHANNEL)->info("Cart item updated", [ + 'product_id' => $product->id, + 'product_name' => $product->getLang('name'), + 'qty' => $data['qty'] + ]); + } else { + // If 0 get the item by qty:1 and remove it + Yard::instance('shopping')->remove($cartItem->rowId); + Log::channel(self::LOG_CHANNEL)->info("Cart item removed", [ + 'product_id' => $product->id, + 'product_name' => $product->getLang('name') + ]); + } + + Yard::instance('shopping')->reCalculateShippingPrice(); + $this->checkCompProduct(Yard::instance('shopping')->getNumComp()); + + $html_card = view("user.order.yard_view_form", $data)->render(); + $html_comp = view("user.order.comp_product", $data)->render(); + + return response()->json(['response' => true, 'data' => $data, 'html_card' => $html_card, 'html_comp' => $html_comp]); + } + + /** + * Handle updating shipping country + */ + private function handleUpdateShippingCountry($data, $is_for) + { + if (isset($data['shipping_country_id'])) { + $shipping_country = ShippingCountry::find($data['shipping_country_id']); + if ($shipping_country) { + Yard::instance('shopping')->setShippingCountryWithPrice($shipping_country->id, $is_for); + $this->checkCompProduct(Yard::instance('shopping')->getNumComp()); + + Log::channel(self::LOG_CHANNEL)->info("Shipping country updated", [ + 'shipping_country_id' => $shipping_country->id, + 'shipping_country_name' => $shipping_country->name ?? 'unknown' + ]); + } else { + Log::channel(self::LOG_CHANNEL)->warning("Shipping country not found", [ + 'shipping_country_id' => $data['shipping_country_id'] + ]); + } + } + + $html_card = view("user.order.yard_view_form", $data)->render(); + $html_comp = view("user.order.comp_product", $data)->render(); + + return response()->json(['response' => true, 'data' => $data, 'html_card' => $html_card, 'html_comp' => $html_comp]); + } + + /** + * Handle updating compensation products + */ + private function handleUpdateCompProduct($data, $is_for) + { + $this->updateCompProduct($data); + Yard::instance('shopping')->reCalculateShippingPrice(); + + Log::channel(self::LOG_CHANNEL)->info("Compensation product updated", [ + 'comp_product_id' => $data['comp_product_id'] ?? null, + 'comp_num' => $data['comp_num'] ?? null, + 'count_comp_products' => $data['count_comp_products'] ?? null + ]); + + $html_card = view("user.order.yard_view_form", $data)->render(); + $html_comp = view("user.order.comp_product", $data)->render(); + + return response()->json(['response' => true, 'data' => $data, 'html_card' => $html_card, 'html_comp' => $html_comp]); + } + + /** + * Check and remove compensation products if needed + */ + private function checkCompProduct($count_comp_products) + { foreach (Yard::instance('shopping')->content() as $row) { - //wenn gleich löschen, da neue Versandkosten - if($row->options->comp > $count_comp_products) { + // If equal or greater, delete due to new shipping costs + if ($row->options->comp && $row->options->comp > intval($count_comp_products)) { Yard::instance('shopping')->remove($row->rowId); + Log::channel(self::LOG_CHANNEL)->info("Compensation product removed due to count change", [ + 'product_id' => $row->id, + 'product_name' => $row->name, + 'comp_value' => $row->options->comp, + 'required_comp' => $count_comp_products + ]); } } } - private function updateCompProduct($data){ - //clear old - foreach (Yard::instance('shopping')->content() as $row) { - //wenn kleiner wurde ein produkt entfernt aufgrund der Anzahl - //wenn gleich löschen, da neue Versandkosten - if($row->options->comp === $data['comp_num'] || $row->options->comp > $data['count_comp_products']) { - Yard::instance('shopping')->remove($row->rowId); - } - } + /** + * Update compensation products + */ + private function updateCompProduct($data) + { + // Clear old + foreach (Yard::instance('shopping')->content() as $row) { + // If count_comp_products is smaller, the product was removed due to quantity + // if comp_num equals the comp product, the product was removed due to new shipping costs + //count_comp_products wie viele comp products werden gebraucht + //comp_num welches comp product wird hinzugefügt + if ($row->options->comp && ($row->options->comp == intval($data['comp_num']) || $row->options->comp > intval($data['count_comp_products']))) { + Yard::instance('shopping')->remove($row->rowId); + Log::channel(self::LOG_CHANNEL)->info("Compensation product removed during update", [ + 'product_id' => $row->id, + 'product_name' => $row->name, + 'comp_value' => $row->options->comp, + 'comp_num' => $data['comp_num'], + 'count_comp_products' => $data['count_comp_products'] + ]); + } + } - if(isset($data['comp_product_id'])) { - if ($product = Product::find($data['comp_product_id'])) { - $image = ""; - if ($product->images->count()) { - $image = $product->images->first()->slug; - } - $cartItem = Yard::instance('shopping')->add($product->id, $product->getLang('name'), 1, 0, false, false, - ['image' => $image, 'slug' => $product->slug, 'weight' => 0, 'points' => 0, - 'comp' => $data['comp_num'], 'product_id' => $product->id]); - Yard::setTax($cartItem->rowId, 0); + if (isset($data['comp_product_id'])) { + $product = Product::find($data['comp_product_id']); + if ($product) { + $image = ""; + if ($product->images->count()) { + $image = $product->images->first()->slug; } + $cartItem = Yard::instance('shopping')->add($product->id, $product->getLang('name'), 1, 0, false, false, [ + 'image' => $image, + 'slug' => $product->slug, + 'weight' => 0, + 'points' => 0, + 'comp' => intval($data['comp_num']), + 'product_id' => $product->id + ] + ); + + Yard::setTax($cartItem->rowId, 0); + + Log::channel(self::LOG_CHANNEL)->info("Compensation product added", [ + 'product_id' => $product->id, + 'product_name' => $product->getLang('name'), + 'comp_num' => $data['comp_num'] + ]); + } else { + Log::channel(self::LOG_CHANNEL)->warning("Compensation product not found", [ + 'comp_product_id' => $data['comp_product_id'] + ]); } + } } - private function getCompProducts($for){ - if(Shop::isCompProducts($for)){ - $show_on = '0'; - switch($for){ - case 'me': - $show_on = '2'; - break; - case 'abo-me': - $show_on = '12'; - break; - case 'ot-member': - $show_on = '3'; - break; - case 'ot-customer': - $show_on = '3'; - break; - case 'abo-ot-member': - $show_on = '13'; - break; - case 'abo-ot-customer': - $show_on = '13'; - break; - } - return Product::whereActive(true)->where('shipping_addon', true)->whereJsonContains('show_on', $show_on)->orderBy('pos', 'DESC')->get(); + /** + * Display custom payment page + */ + public function customPayment($identifier) + { + try { + $data = OrderPaymentService::getCustomPayment($identifier); + Log::channel(self::LOG_CHANNEL)->info("Custom payment page accessed", ['identifier' => $identifier]); + return view('user.order.payment.custom_payment', $data); + } catch (\Exception $e) { + Log::channel(self::LOG_CHANNEL)->error("Error accessing custom payment: " . $e->getMessage(), ['identifier' => $identifier]); + abort(404, 'Custom payment not found'); } - - return null; } - public function customPayment($identifier){ - - $shopping_instance = ShoppingInstance::where('identifier', $identifier)->first(); - if(!$shopping_instance){ - abort(403, __('msg.shopping_instance_not_found')); - } - $shopping_data = $shopping_instance->shopping_data; - $shopping_user = $shopping_data['shopping_user_id'] ? ShoppingUser::find($shopping_data['shopping_user_id']) : null; - if(!$shopping_user){ - abort(403, __('msg.shopping_user_not_found')); - } - - $yard_shopping_items = Shop::getYardShoppingItems(); - - $data = [ - 'shopping_instance' => $shopping_instance, - 'shopping_user' => $shopping_user, - 'yard_shopping_items' => $yard_shopping_items, - 'identifier' => $identifier, - ]; - return view('user.order.custom_payment', $data); - } - - - private static function customPaymentSendMail($user, $identifier, $yard_shopping_items, $data){ + /** + * Send custom payment email + */ + private function customPaymentSendMail($user, $identifier, $yard_shopping_items, $data) + { $bcc = []; $shopping_instance = ShoppingInstance::where('identifier', $identifier)->first(); - if(!$shopping_instance){ - abort(403, __('msg.shopping_instance_not_found')); + + if (!$shopping_instance) { + Log::channel(self::LOG_CHANNEL)->error("Shopping instance not found for email", ['identifier' => $identifier]); + throw new \Exception(__('msg.shopping_instance_not_found')); } + $shopping_user = $data['shopping_user_id'] ? ShoppingUser::find($data['shopping_user_id']) : null; - if(!$shopping_user){ - abort(403, __('msg.shopping_user_not_found')); + + if (!$shopping_user) { + Log::channel(self::LOG_CHANNEL)->error("Shopping user not found for email", ['shopping_user_id' => $data['shopping_user_id']]); + throw new \Exception(__('msg.shopping_user_not_found')); } - $route = route('checkout.checkout_card', ['identifier'=>$identifier]); - + $route = route('checkout.checkout_card', ['identifier' => $identifier]); + $billing_email = $shopping_user->billing_email; - if(!$billing_email){ + if (!$billing_email) { $billing_email = $data['mode'] === 'test' ? config('app.checkout_test_mail') : config('app.checkout_mail'); } + $bcc[] = $data['mode'] === 'test' ? config('app.checkout_test_mail') : config('app.checkout_mail'); $bcc[] = $shopping_user->member ? $shopping_user->member->email : $user->email; - Mail::to($billing_email)->bcc($bcc)->locale(\App::getLocale()) + Log::channel(self::LOG_CHANNEL)->info("Sending custom payment email", [ + 'to' => $billing_email, + 'bcc' => $bcc, + 'identifier' => $identifier + ]); + + Mail::to($billing_email) + ->bcc($bcc) + ->locale(\App::getLocale()) ->send(new MailCustomPaymet($route, $shopping_user, $shopping_instance, $yard_shopping_items, $data['mode'])); } } \ No newline at end of file diff --git a/app/Http/Controllers/User/OrderController_bak.php b/app/Http/Controllers/User/OrderController_bak.php new file mode 100644 index 0000000..3323d65 --- /dev/null +++ b/app/Http/Controllers/User/OrderController_bak.php @@ -0,0 +1,674 @@ +middleware('active.account'); + } + + public function index() + { + + $data = [ + ]; + return view('user.order.index', $data); + } + + public function detail($id) + { + $user = User::find(\Auth::user()->id); + $shopping_order = ShoppingOrder::findOrFail($id); + if($shopping_order->auth_user_id !== $user->id){ + abort(404); + } + if( $shopping_order->payment_for === 6 || $shopping_order->payment_for === 7){ + return redirect(route('user_shop_order_detail', [$shopping_order->id])); + abort(403, 'Kundenbestellung'); + } + $shopping_order->getLastShoppingPayment(); + + $data = [ + 'shopping_order' => $shopping_order, + 'isAdmin' => false, + ]; + return view('user.order.detail', $data); + } + + public function ordersDatatable(){ + + $user = User::find(\Auth::user()->id); + $query = ShoppingOrder::with('shopping_user', 'shopping_payments')->select('shopping_orders.*')->where('auth_user_id', '=', $user->id)->where('txaction', '!=', NULL); + + return \DataTables::eloquent($query) + ->addColumn('id', function (ShoppingOrder $ShoppingOrder) { + return ''; + }) + ->addColumn('created_at', function (ShoppingOrder $ShoppingOrder) { + return $ShoppingOrder->created_at->format("d.m.Y"); + }) + ->addColumn('txaction', function (ShoppingOrder $ShoppingOrder) { + return Payment::getShoppingOrderBadge($ShoppingOrder); + }) + ->addColumn('total_shipping', function (ShoppingOrder $ShoppingOrder) { + return ''.$ShoppingOrder->getFormattedTotalShipping()." €"; + }) + ->addColumn('payment', function (ShoppingOrder $ShoppingOrder) { + return $ShoppingOrder->getLastShoppingPayment('getPaymentType'); + }) + ->addColumn('shipped', function (ShoppingOrder $ShoppingOrder) { + if($ShoppingOrder->payment_for === 8){ + return ''; + } + return ''.$ShoppingOrder->getShippedType().''; + }) + ->addColumn('payment_for', function (ShoppingOrder $ShoppingOrder) { + return Payment::getPaymentForBadge($ShoppingOrder); + + }) + ->addColumn('invoice', function (ShoppingOrder $ShoppingOrder) { + return $ShoppingOrder->isInvoice() ? ' + ' : '-'; + }) + ->addColumn('reference', function (ShoppingOrder $ShoppingOrder) { + return $ShoppingOrder->getLastShoppingPayment('reference'); + }) + ->orderColumn('id', 'id $1') + ->orderColumn('txaction', 'txaction $1') + ->orderColumn('shipped', 'shipped $1') + ->orderColumn('total_shipping', 'total_shipping $1') + ->orderColumn('payment_for', 'payment_for $1') + + ->rawColumns(['id', 'txaction', 'payment_for', 'total_shipping', 'invoice', 'shipped']) + ->make(true); + } + + /* + $for = me, ot-member, ot-customer, abo-ot-member, abo-ot-customer, abo-me + */ + + public function delivery($for, $id=null) + { + $user = User::find(\Auth::user()->id); + $shopping_user = null; + $delivery_id = null; + if(strpos($for, 'ot') !== false){ //ot-member, ot-customer abo-ot-member, abo-ot-customer, + $shopping_user = Shop::checkShoppingUser($id, $user); + $delivery_id = $shopping_user->id; + if(!Shop::checkShoppingCountry($for, $delivery_id) && !\Session()->has('custom-error')){ + $country = Shop::getDeliveryCountry($for, $delivery_id); + \Session()->flash('custom-error', $country.": ".__('validation.custom.shipping_not_found')); + return redirect(route('user_order_my_delivery', [$for, $delivery_id])); + } + if($for === 'abo-ot-customer'){ + //check if user has an Abo + if(AboHelper::hasAboByEmail($shopping_user->billing_email) && !\Session()->has('custom-error')){ + \Session()->flash('custom-error', __('abo.error_email_has_abo', ['email' => $shopping_user->billing_email])); + return redirect(route('user_order_my_delivery', [$for, $delivery_id])); + } + } + } + if(Request::get('action') === 'next'){ + Yard::instance('shopping')->destroy(); + if(strpos(Request::get('switchers-radio-is-for'), 'ot') !== false){ + $delivery_id = $id; + } + return redirect(route('user_order_my_list', [Request::get('switchers-radio-is-for'), $delivery_id])); + } + $data = [ + 'shopping_user' => $shopping_user, + 'isAdmin' => false, + 'isView' => 'customer', + 'for' => $for, + 'delivery_id' => $delivery_id, + ]; + return view('user.order.delivery', $data); + } + + public function list($for, $id=null) + { + $user = User::find(\Auth::user()->id); + if($for === 'abo-me' && AboHelper::userHasAbo($user)){ + abort(403, 'User has an Abo. Cannot order.'); + } + $shopping_user = null; + $delivery_id = null; + if(strpos($for, 'ot') !== false){ //ot-member, ot-customer abo-ot-member, abo-ot-customer, + $shopping_user = Shop::checkShoppingUser($id, $user); + $delivery_id = $shopping_user->id; + } + if($for === 'ot-customer' || $for === 'abo-ot-customer'){ + //Liederung an (abo-) ot-customer (Kunden) Zahlung und Rechnung geht an Kunden + UserService::initCustomerYard($shopping_user, $for); + }else{ + //Lieferung an user oder (abo-) ot-member (Kunden) rechnung geht an User + //lieferland und rechnungsland prüfen + $shipping_country_id = Shop::checkShoppingCountry($for, $id); + if(!$shipping_country_id){ + $country = Shop::getDeliveryCountry($for, $id); + \Session()->flash('custom-error', $country.": ".__('validation.custom.shipping_not_found')); + return redirect(route('user_order_my_delivery', [$for, $delivery_id])); + } + UserService::initUserYard($user, $shipping_country_id, $for); + } + $data = [ + 'shopping_user' => $shopping_user, + 'user' => $user, + 'isAdmin' => false, + 'isView' => 'customer', + 'for' => $for, + 'template' => str_replace('abo-', '', $for), + 'delivery_id' => $delivery_id, + 'is_abo' => strpos($for, 'abo') !== false, + 'comp_products' => Shop::getCompProducts($for), + ]; + return view('user.order.list', $data); + } + + public function payment($for, $id=null){ + $data = Request::all(); + $user = User::find(Auth::user()->id); + $rules = array( + 'shipping_salutation' => 'required', + 'shipping_firstname'=>'required', + 'shipping_lastname'=>'required', + 'shipping_address'=>'required', + 'shipping_zipcode'=>'required', + 'shipping_city' => 'required', + 'shipping_state' => 'required', + ); + $validator = Validator::make(Request::all(), $rules); + if ($validator->fails()) { + return back()->withErrors($validator)->withInput(Request::all()); + } + //hier prüfen, ob versand etc richtig berechnet wurde + $this->checkSendYardForPayment($data, $id); + + if(Yard::instance('shopping')->getNumComp() > 0){ + if(!isset($data['switchers-comp-product'])){ + $validator->errors()->add('switchers-comp-product', __('msg.please_select_compensation_product')); + }else{ + if(!is_array($data['switchers-comp-product'])){ + $validator->errors()->add('switchers-comp-product', __('msg.please_select_compensation_product')); + }else{ + if(count($data['switchers-comp-product']) !== Yard::instance('shopping')->getNumComp()){ + $validator->errors()->add('switchers-comp-product', __('mdg.please_select_count_compensation_products', ['count'=>Yard::instance('shopping')->getNumComp()])); + } + } + } + if ($validator->errors()->count()) { + return back()->withErrors($validator)->withInput(Request::all()); + } + } + do { + $identifier = Util::getToken(); + } while( ShoppingInstance::where('identifier', $identifier)->count() ); + $data['is_from'] = 'user_order'; + $data['is_for'] = $for; + $data['is_abo'] = $data['is_abo'] ?? 0; + $data['abo_interval'] = $data['abo_interval'] ?? 0; + $data['shopping_user_id'] = $id; + $data['user_price_infos'] = Yard::instance('shopping')->getUserPriceInfos(); + unset($data['quantity']); + unset($data['_token']); + $data['mode'] = config('app.mode') === 'test' ? 'test' : 'live'; + if($for === 'ot-customer' || $for === 'abo-ot-customer'){ + $shopping_instance = ShoppingInstance::create([ + 'identifier' => $identifier, + 'user_shop_id' => $user->shop->id, + 'payment' => 6, //Berater Shop to Customer Shop + 'subdomain' => $user->shop->getSubdomain(), + 'country_id' => Yard::instance('shopping')->getShippingCountryId(), + 'language' => \App::getLocale(), + 'amount' => Yard::instance('shopping')->totalWithShipping(2, '.', ''), + 'status' => 0, + 'shopping_user_id' => $id, + 'shopping_data' => $data, + 'back' => url()->previous(), + + ]); + Yard::instance('shopping')->store($identifier); + $yard_shopping_items = OrderPaymentService::getRestoredYardShoppingItems($shopping_instance); + + // send Mail to Customer + $this->customPaymentSendMail($user, $identifier, $yard_shopping_items, $data); + UserHistory::create(['user_id' => $user->id, 'action'=>'user_order_customer', 'status'=>1, 'product_id'=>null, 'identifier'=>$identifier, 'is_abo'=>$data['is_abo']]); + + //eine Abschließen bestellseite für den User + Link zum Kunden Shop + Mail an den Kunden / Berater + return redirect(route('user_order_my_custom_payment', ['identifier'=>$identifier])); + }else{ + ShoppingInstance::create([ + 'identifier' => $identifier, + 'user_shop_id' => 1, //is first faker shop for buy intern + 'auth_user_id' => Auth::user()->id, + 'payment' => 2, //Berater Shop + 'subdomain' => url('/'), + 'country_id' => Yard::instance('shopping')->getShippingCountryId(), + 'language' => \App::getLocale(), + 'amount' => Yard::instance('shopping')->totalWithShipping(2, '.', ''), + 'status' => 0, + 'shopping_user_id' => $id, + 'shopping_data' => $data, + 'back' => url()->previous(), + + ]); + Yard::instance('shopping')->store($identifier); + $path = route('checkout.checkout_card', ['identifier'=>$identifier]); + UserHistory::create(['user_id' => $user->id, 'action'=>'user_order_payment', 'status'=>1, 'product_id'=>null, 'identifier'=>$identifier, 'is_abo'=>$data['is_abo']]); + //$path = str_replace('http', 'https', $path); + return redirect()->secure($path); + } + + } + + private function checkSendYardForPayment($data, $id){ + + $user = User::find(\Auth::user()->id); + $shopping_user = null; + if(strpos($data['shipping_is_for'], 'ot') !== false){ + $shopping_user = Shop::checkShoppingUser($id, $user); + } + + $shipping_country_id = Shop::checkShoppingCountry($data['shipping_is_for'], $id); + if(!$shipping_country_id){ + $identifier = 'error-'.time().mt_rand(1000000, 9999999); + Yard::instance('shopping')->store($identifier); + $data['user_id'] = Auth::user()->id; + $data['shopping_user_id'] = $id; + \App\Services\MyLog::writeLog('payment', 'error', 'no shipping_country_id found | Yard identifier: '.$identifier, $data); + abort(403, __('msg.shipping_country_was_not_found')); + } + //must be the same shipping country + if($shipping_country_id != Yard::instance('shopping')->getShippingCountryId()){ + $identifier = 'error-'.time().mt_rand(1000000, 9999999); + Yard::instance('shopping')->store($identifier); + $data['user_id'] = Auth::user()->id; + $data['shopping_user_id'] = $id; + \App\Services\MyLog::writeLog('payment', 'error', 'shipping_country_id is not the same from Yard | Yard identifier: '.$identifier, $data); + abort(403, __('msg.shipping_country_was_not_correctly')); + } + + if($data['shipping_is_for'] !== 'ot-customer'){ + if(Yard::instance('shopping')->shipping_free){ + $identifier = 'error-'.time().mt_rand(1000000, 9999999); + Yard::instance('shopping')->store($identifier); + $data['user_id'] = Auth::user()->id; + $data['shopping_user_id'] = $id; + \App\Services\MyLog::writeLog('payment', 'error', 'Yard can by not shipping_free | Yard identifier: '.$identifier, $data); + abort(403, __('msg.shopping_cart_was_shipping_free')); + } + } + + if($data['shipping_is_for'] === 'ot-customer'){ + if(!$user->shop){ + $identifier = 'error-'.time().mt_rand(1000000, 9999999); + Yard::instance('shopping')->store($identifier); + $data['user_id'] = Auth::user()->id; + $data['shopping_user_id'] = $id; + \App\Services\MyLog::writeLog('payment', 'error', 'User has no Shop for an User to Customer order| Yard identifier: '.$identifier, $data); + abort(403, __('msg.shopping_cart_was_not_user_shop')); + } + } + + $shipping_price = Shop::getShippingPriceByShippingCountryId($shipping_country_id, Yard::instance('shopping')->weight()); + dump($shipping_price); + //for other and has weight - check + if(strpos($data['shipping_is_for'], 'ot') !== false && $data['shipping_is_for'] !== 'ot-customer' && Yard::instance('shopping')->weight() > 0){ + if(!Yard::instance('shopping')->getShippingPrice() || Yard::instance('shopping')->getShippingPrice() == 0){ + $identifier = 'error-'.time().mt_rand(1000000, 9999999); + Yard::instance('shopping')->store($identifier); + $data['user_id'] = Auth::user()->id; + $data['shopping_user_id'] = $id; + \App\Services\MyLog::writeLog('payment', 'error', 'Yard OT shipping_price is 0 or | Yard identifier: '.$identifier, $data); + abort(403, __('msg.shipping_cost_cannot_be_0')); + } + if(Yard::instance('shopping')->getShippingPrice() != $shipping_price->price){ + $identifier = 'error-'.time().mt_rand(1000000, 9999999); + Yard::instance('shopping')->store($identifier); + $data['user_id'] = Auth::user()->id; + $data['shopping_user_id'] = $id; + \App\Services\MyLog::writeLog('payment', 'error', 'Yard OT shipping_price is not the same from shipping_price | Yard identifier: '.$identifier, $data); + abort(403, __('msg.shipping_costs_were_not_calculated_correctly')); + } + } + if(($data['shipping_is_for'] == 'me' || $data['shipping_is_for'] == 'abo-me') && Yard::instance('shopping')->weight() > 0){ + if(!Yard::instance('shopping')->getShippingPrice() || Yard::instance('shopping')->getShippingPrice() == 0){ + $identifier = 'error-'.time().mt_rand(1000000, 9999999); + Yard::instance('shopping')->store($identifier); + $data['user_id'] = Auth::user()->id; + $data['shopping_user_id'] = $id; + \App\Services\MyLog::writeLog('payment', 'error', 'Yard ME shipping_price is 0 or | Yard identifier: '.$identifier, $data); + abort(403, __('msg.shipping_cost_cannot_be_0')); + } + dump(Yard::instance('shopping')->getShippingPrice()); + dump($shipping_price->price_comp); + dump(Yard::instance('shopping')->getNumComp()); + dump($shipping_price->num_comp); + dd($data) ; + + if(Yard::instance('shopping')->getShippingPrice() != $shipping_price->price_comp){ + $identifier = 'error-'.time().mt_rand(1000000, 9999999); + Yard::instance('shopping')->store($identifier); + $data['user_id'] = Auth::user()->id; + $data['shopping_user_id'] = $id; + \App\Services\MyLog::writeLog('payment', 'error', 'Yard ME shipping_price is not the same from shipping_price | Yard identifier: '.$identifier, $data); + abort(403, __('msg.shipping_costs_were_not_calculated_correctly')); + } + + if(Yard::instance('shopping')->getNumComp() != $shipping_price->num_comp){ + $identifier = 'error-'.time().mt_rand(1000000, 9999999); + Yard::instance('shopping')->store($identifier); + $data['user_id'] = Auth::user()->id; + $data['shopping_user_id'] = $id; + \App\Services\MyLog::writeLog('payment', 'error', 'Yard num_comp is 0 | Yard identifier: '.$identifier, $data); + abort(403, __('msg.compensation_products_cannot_be_0')); + } + + } + } + + public function datatable(){ + + + if(Request::get('shipping_is_for') === 'me' || Request::get('shipping_is_for') === 'abo-me'){ + $show_on_ids = Request::get('is_abo') ? ['12', '13'] : ['2']; + $query = Product::with('product_buyings') + ->select('products.*')->where('products.active', true) + ->where(function($q) use ($show_on_ids) { + foreach($show_on_ids as $id) { + $q->orWhereJsonContains('show_on', $id); + } + }) + ->orderByRaw("CASE + WHEN JSON_CONTAINS(show_on, ?, '$') THEN 1 + WHEN JSON_CONTAINS(show_on, ?, '$') THEN 2 + ELSE 3 END", + [$show_on_ids[0], isset($show_on_ids[1]) ? $show_on_ids[1] : $show_on_ids[0]]); + }else{ + $show_on_ids = Request::get('is_abo') ? ['12', '13'] : ['3']; + $query = Product::select('products.*') + ->where('active', true) + ->where(function($q) use ($show_on_ids) { + foreach($show_on_ids as $id) { + $q->orWhereJsonContains('show_on', $id); + } + }) + ->orderByRaw("CASE + WHEN JSON_CONTAINS(show_on, ?, '$') THEN 1 + WHEN JSON_CONTAINS(show_on, ?, '$') THEN 2 + ELSE 3 END", + [$show_on_ids[0], isset($show_on_ids[1]) ? $show_on_ids[1] : $show_on_ids[0]]); + } + return \DataTables::eloquent($query) + + ->addColumn('product', function (Product $product) { + $cartItem = Yard::instance('shopping')->getCartItemByProduct($product->id); + $qty = isset($cartItem->qty) ? $cartItem->qty : 0; + $rowId = isset($cartItem->rowId) ? $cartItem->rowId : ''; + return ''.$product->getLang('name').'
+
+
+ + + + + + + +
+
'; + }) + ->addColumn('abo', function (Product $product) { + return AboHelper::getAboTypeBadge(AboHelper::getAboShowOn($product)); + }) + /* + ->addColumn('add_card', function (Product $product) { + return ''; + }) + ->addColumn('quantity', function (Product $product) { + $cartItem = Yard::instance('shopping')->getCartItemByProduct($product->id); + $qty = isset($cartItem->qty) ? $cartItem->qty : 0; + $rowId = isset($cartItem->rowId) ? $cartItem->rowId : ''; + return '
+
+ + + + + + + +
+
'; + + })*/ + ->addColumn('picture', function (Product $product) { + if(count($product->images)){ + return ''; + } + return ""; + }) + ->addColumn('price_net', function (Product $product) { + return ''.$product->getFormattedPriceWith(true, true, Yard::instance('shopping')->getUserCountry()). " €".''.$product->getFormattedPriceCurrencyWith(true, true, Yard::instance('shopping')->getUserCountry()).''; + }) + ->addColumn('price_gross', function (Product $product) { + return ''.$product->getFormattedPriceWith(false, true, Yard::instance('shopping')->getUserCountry()). " €".''.$product->getFormattedPriceCurrencyWith(false, true, Yard::instance('shopping')->getUserCountry()).''; + }) + ->addColumn('price_vk_gross', function (Product $product) { + return ''.$product->getFormattedPriceWith(false, false, Yard::instance('shopping')->getUserCountry()). " €".''.$product->getFormattedPriceCurrencyWith(false, false, Yard::instance('shopping')->getUserCountry()).''; + }) + ->addColumn('customer_price_net', function (Product $product) { + return ''.$product->getFormattedPriceWith(true, false, Yard::instance('shopping')->getUserCountry()). " €".''.$product->getFormattedPriceCurrencyWith(true, false, Yard::instance('shopping')->getUserCountry()).''; + }) + ->addColumn('customer_price_gross', function (Product $product) { + return ''.$product->getFormattedPriceWith(false, false, Yard::instance('shopping')->getUserCountry()). " €".''.$product->getFormattedPriceCurrencyWith(false, false, Yard::instance('shopping')->getUserCountry()).''; + }) + ->addColumn('my_commission_net', function (Product $product) { + return ''.$product->getFormattedPriceWith(true, false, Yard::instance('shopping')->getUserCountry(), true). " €".''.$product->getFormattedPriceCurrencyWith(true, false, Yard::instance('shopping')->getUserCountry(), true).''; + }) + ->addColumn('action', function (Product $product) { + return ''; + }) + ->filterColumn('product', function($query, $keyword) { + if($keyword != ""){ + $query->where('name', 'LIKE', '%'.$keyword.'%'); + } + }) + ->orderColumn('name', 'name $1') + ->orderColumn('product', 'name $1') + ->orderColumn('number', 'number $1') + ->orderColumn('points', 'points $1') + ->orderColumn('price_net', 'price_net $1') + ->orderColumn('price_gross', 'price_gross $1') + ->orderColumn('price_vk_gross', 'price $1') + ->orderColumn('customer_price_net', 'price $1') + ->orderColumn('customer_price_gross', 'price $1') + ->orderColumn('my_commission_net', 'price $1') + ->orderColumn('contents_total', 'contents_total $1') + ->orderColumn('weight', 'weight $1') + ->orderColumn('abo', 'show_on $1') + ->rawColumns(['add_card', 'price_net', 'price_gross', 'price_vk_gross', 'customer_price_net', 'customer_price_gross', 'my_commission_net', 'product', 'quantity', 'picture', 'abo', 'action']) + ->make(true); + } + + + public function performRequest(){ + + if(Request::ajax()) { + $data = Request::all(); + + $is_for = isset($data['shipping_is_for']) ? $data['shipping_is_for'] : 'ot-member'; + $data['for'] = $is_for; + $data['comp_products'] = Shop::getCompProducts($is_for); + + if($data['action'] === 'updateCart' && isset($data['product_id'])){ + if($product = Product::find($data['product_id'])){ + $image = ""; + if($product->images->count()){ + $image = $product->images->first()->slug; + } + + //get the card item + if($is_for === 'ot-customer' || $is_for === 'abo-ot-customer'){ + $cartItem = Yard::instance('shopping') + ->add($product->id, $product->getLang('name'), 1, + round($product->getPriceWith(Yard::instance('shopping')->getUserTaxFree(), false, Yard::instance('shopping')->getUserCountry()), 1), false, false, + ['image' => $image, 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points, 'no_commission' => $product->no_commission, 'show_on' => $product->show_on]); + }else{ + $cartItem = Yard::instance('shopping') + ->add($product->id, $product->getLang('name'), 1, + $product->getPriceWith(Yard::instance('shopping')->getUserTaxFree(), true, Yard::instance('shopping')->getUserCountry()), false, false, + ['image' => $image, 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points, 'no_commission' => $product->no_commission, 'show_on' => $product->show_on]); + } + if(Yard::instance('shopping')->getUserTaxFree()){ + Yard::setTax($cartItem->rowId, 0); + }else{ + Yard::setTax($cartItem->rowId, $product->getTaxWith(Yard::instance('shopping')->getUserCountry())); + } + if(isset($data['qty']) && $data['qty'] > 0){ + Yard::instance('shopping')->update($cartItem->rowId, $data['qty']); + }else{ + //if 0 get the item by qty:1 and remove it + Yard::instance('shopping')->remove($cartItem->rowId); + } + Yard::instance('shopping')->reCalculateShippingPrice(); + $this->checkCompProduct(Yard::instance('shopping')->getNumComp()); + $html_card = view("user.order.yard_view_form", $data)->render(); + $html_comp = view("user.order.comp_product", $data)->render(); + + return response()->json(['response' => true, 'data'=>$data, 'html_card'=>$html_card, 'html_comp'=>$html_comp]); + } + } + if($data['action'] === 'clearCart') { + Yard::instance('shopping')->destroy(); + return response()->json(['response' => true, 'data'=>Yard::instance('shopping')->count(), 'html_card'=>'', 'html_comp'=>'']); + + } + + if($data['action'] === 'updateShippingCountry') { + if(isset($data['shipping_country_id'])){ + if($shipping_country = ShippingCountry::find($data['shipping_country_id'])){ + Yard::instance('shopping')->setShippingCountryWithPrice($shipping_country->id, $is_for); + $this->checkCompProduct(Yard::instance('shopping')->getNumComp()); + } + } + $html_card = view("user.order.yard_view_form", $data)->render(); + $html_comp = view("user.order.comp_product", $data)->render(); + return response()->json(['response' => true, 'data'=>$data, 'html_card'=>$html_card, 'html_comp'=>$html_comp]); + + } + if($data['action'] === 'updateCompProduct'){ + // $data['comp_product_id'] + // $data['comp_num'] + //count_comp_products + $this->updateCompProduct($data); + Yard::instance('shopping')->reCalculateShippingPrice(); + $html_card = view("user.order.yard_view_form", $data)->render(); + $html_comp = view("user.order.comp_product", $data)->render(); + + return response()->json(['response' => true, 'data'=>$data, 'html_card'=>$html_card, 'html_comp'=>$html_comp]); + + } + return response()->json(['response' => false, 'data'=>$data]); + } + } + + private function checkCompProduct($count_comp_products){ + foreach (Yard::instance('shopping')->content() as $row) { + //wenn gleich löschen, da neue Versandkosten + if($row->options->comp > $count_comp_products) { + Yard::instance('shopping')->remove($row->rowId); + } + } + } + + private function updateCompProduct($data){ + //clear old + foreach (Yard::instance('shopping')->content() as $row) { + //wenn kleiner wurde ein produkt entfernt aufgrund der Anzahl + //wenn gleich löschen, da neue Versandkosten + if($row->options->comp === $data['comp_num'] || $row->options->comp > $data['count_comp_products']) { + Yard::instance('shopping')->remove($row->rowId); + } + } + + if(isset($data['comp_product_id'])) { + if ($product = Product::find($data['comp_product_id'])) { + $image = ""; + if ($product->images->count()) { + $image = $product->images->first()->slug; + } + $cartItem = Yard::instance('shopping')->add($product->id, $product->getLang('name'), 1, 0, false, false, + ['image' => $image, 'slug' => $product->slug, 'weight' => 0, 'points' => 0, + 'comp' => $data['comp_num'], 'product_id' => $product->id]); + Yard::setTax($cartItem->rowId, 0); + } + } + } + + public function customPayment($identifier){ + + $data = OrderPaymentService::getCustomPayment($identifier); + return view('user.order.payment.custom_payment', $data); + } + + + private static function customPaymentSendMail($user, $identifier, $yard_shopping_items, $data){ + $bcc = []; + $shopping_instance = ShoppingInstance::where('identifier', $identifier)->first(); + if(!$shopping_instance){ + abort(403, __('msg.shopping_instance_not_found')); + } + $shopping_user = $data['shopping_user_id'] ? ShoppingUser::find($data['shopping_user_id']) : null; + if(!$shopping_user){ + abort(403, __('msg.shopping_user_not_found')); + } + + $route = route('checkout.checkout_card', ['identifier'=>$identifier]); + + $billing_email = $shopping_user->billing_email; + if(!$billing_email){ + $billing_email = $data['mode'] === 'test' ? config('app.checkout_test_mail') : config('app.checkout_mail'); + } + $bcc[] = $data['mode'] === 'test' ? config('app.checkout_test_mail') : config('app.checkout_mail'); + $bcc[] = $shopping_user->member ? $shopping_user->member->email : $user->email; + + Mail::to($billing_email)->bcc($bcc)->locale(\App::getLocale()) + ->send(new MailCustomPaymet($route, $shopping_user, $shopping_instance, $yard_shopping_items, $data['mode'])); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/User/OrderPaymentController.php b/app/Http/Controllers/User/OrderPaymentController.php new file mode 100644 index 0000000..5934028 --- /dev/null +++ b/app/Http/Controllers/User/OrderPaymentController.php @@ -0,0 +1,97 @@ +middleware('active.account'); + } + + public function index() + { + $data = [ + ]; + return view('user.order.payment.index', $data); + } + + public function detail($identifier) + { + $data = OrderPaymentService::getCustomPayment($identifier); + $data['backlink'] = route('user_order_payment_links'); + return view('user.order.payment.custom_payment', $data); + } + + public function delete($identifier){ + OrderPaymentService::deleteInstance($identifier); + return redirect(route('user_order_payment_links')); + } + + public function datatable(){ + + $user = User::find(\Auth::user()->id); + $user_shop_id = $user->shop ? $user->shop->id : null; + $query = ShoppingInstance::select('*') + ->where('user_shop_id', '=', $user_shop_id) + ->where('payment', 6); + + return \DataTables::eloquent($query) + ->addColumn('id', function (ShoppingInstance $shoppingInstance) { + return ''; + }) + ->addColumn('created_at', function (ShoppingInstance $shoppingInstance) { + return $shoppingInstance->created_at->format("d.m.Y"); + }) + ->addColumn('status', function (ShoppingInstance $shoppingInstance) { + return OrderPaymentService::getStatusBadge($shoppingInstance); + }) + ->addColumn('payment_method', function (ShoppingInstance $shoppingInstance) { + return $shoppingInstance->payment_method ? $shoppingInstance->payment_method->name : '-'; + }) + ->addColumn('total', function (ShoppingInstance $shoppingInstance) { + if($shoppingInstance->amount > 0){ + return ''.$shoppingInstance->getAmountFormatted()." €"; + }else{ + return '-'; + } + }) + ->addColumn('type', function (ShoppingInstance $shoppingInstance) { + return OrderPaymentService::getTypeBadge($shoppingInstance); + }) + ->addColumn('billing_firstname', function (ShoppingInstance $shoppingInstance) { + return $shoppingInstance->shopping_data['billing_firstname'] ?? '-'; + }) + ->addColumn('billing_lastname', function (ShoppingInstance $shoppingInstance) { + return $shoppingInstance->shopping_data['billing_lastname'] ?? '-'; + }) + ->addColumn('billing_email', function (ShoppingInstance $shoppingInstance) { + return $shoppingInstance->shopping_data['billing_email'] ?? '-'; + }) + ->addColumn('delete', function (ShoppingInstance $shoppingInstance) { + return ''; + }) + + ->orderColumn('id', 'identifier $1') + ->orderColumn('created_at', 'created_at $1') + ->orderColumn('status', 'status $1') + ->orderColumn('total', 'total $1') + ->orderColumn('type', 'type $1') + ->orderColumn('billing_firstname', 'billing_firstname $1') + ->orderColumn('billing_lastname', 'billing_lastname $1') + ->orderColumn('billing_email', 'billing_email $1') + ->rawColumns(['id', 'status', 'type', 'total', 'invoice', 'delete']) + ->make(true); + } + + +} \ No newline at end of file diff --git a/app/Http/Controllers/User/PaymentController.php b/app/Http/Controllers/User/PaymentController.php index 47050b8..dd340f3 100644 --- a/app/Http/Controllers/User/PaymentController.php +++ b/app/Http/Controllers/User/PaymentController.php @@ -50,10 +50,9 @@ class PaymentController extends Controller if(Credit::isCredit($UserCredit)){ $ret .= ' '; $ret .= '
'; - if(Auth::user()->isVIP()){ - $ret .= ' '; - $ret .= ' '; - } + $ret .= ' '; + $ret .= ' '; + }else{ $ret = "-"; } diff --git a/app/Http/Controllers/User/ShopApiController.php b/app/Http/Controllers/User/ShopApiController.php index 0fdc918..8ff418f 100644 --- a/app/Http/Controllers/User/ShopApiController.php +++ b/app/Http/Controllers/User/ShopApiController.php @@ -146,7 +146,7 @@ class ShopApiController extends Controller return $ShoppingOrder->user_shop ? ''.$ShoppingOrder->user_shop->getSubdomain(false).'' : ''; }) ->addColumn('payment_for', function (ShoppingOrder $ShoppingOrder) { - return ''.$ShoppingOrder->getPaymentForType().''; + return Payment::getPaymentForBadge($ShoppingOrder); }) ->addColumn('shipped', function (ShoppingOrder $ShoppingOrder) { return ''.$ShoppingOrder->getShippedType().' diff --git a/app/Http/Controllers/User/ShopSalesController.php b/app/Http/Controllers/User/ShopSalesController.php index 9078162..9003cf6 100755 --- a/app/Http/Controllers/User/ShopSalesController.php +++ b/app/Http/Controllers/User/ShopSalesController.php @@ -28,7 +28,7 @@ class ShopSalesController extends Controller $user = User::find(\Auth::user()->id); $shopping_order = ShoppingOrder::findOrFail($id); if($shopping_order->member_id !== $user->id){ - abort(404); + abort(403, 'Unauthorized action. User ID does not match.'); } if( $shopping_order->payment_for !== 6 && $shopping_order->payment_for !== 7){ return redirect(route('user_order_detail', [$shopping_order->id])); @@ -67,7 +67,7 @@ class ShopSalesController extends Controller return $ShoppingOrder->user_shop ? ''.$ShoppingOrder->user_shop->getSubdomain(false).'' : ''; }) ->addColumn('payment_for', function (ShoppingOrder $ShoppingOrder) { - return ''.$ShoppingOrder->getPaymentForType().''; + return Payment::getPaymentForBadge($ShoppingOrder); }) ->addColumn('shipped', function (ShoppingOrder $ShoppingOrder) { return ''.$ShoppingOrder->getShippedType().' diff --git a/app/Http/Controllers/User/TeamController.php b/app/Http/Controllers/User/TeamController.php index dedb1d2..7978739 100755 --- a/app/Http/Controllers/User/TeamController.php +++ b/app/Http/Controllers/User/TeamController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\User; + use Auth; use Request; use App\User; @@ -26,11 +27,11 @@ class TeamController extends Controller public function members() { $user = User::find(\Auth::user()->id); - if($user->isActiveShop() && $user->shop){ - $shop_register_link = $user->shop->getSubdomain(false)."/reg"; - }else{ - $member_id = 'm'.($user->id + config('mivita.add_number_id')); - $shop_register_link = config('app.protocol').config('app.domain').config('app.tld_care').'/reg/'.$member_id; + if ($user->isActiveShop() && $user->shop) { + $shop_register_link = $user->shop->getSubdomain(false) . "/reg"; + } else { + $member_id = 'm' . ($user->id + config('mivita.add_number_id')); + $shop_register_link = config('app.protocol') . config('app.domain') . config('app.tld_care') . '/reg/' . $member_id; } $data = [ 'shop_register_link' => $shop_register_link @@ -71,7 +72,7 @@ class TeamController extends Controller { $user = User::find(\Auth::user()->id); - if(!$user->isVIP()){ + if (!$user->isVIP()) { abort(404); } $ExportBot = new ExportBot('member'); @@ -82,14 +83,15 @@ class TeamController extends Controller return view('user.team.export', $data); } - public function userTeamExport(){ + public function userTeamExport() + { - if(Request::get('action') === "export"){ + if (Request::get('action') === "export") { $user = User::find(\Auth::user()->id); $ExportBot = new ExportBot('member'); $ExportBot->initStructureUser($user, 'list'); //tree or list $columns = []; - $filename = __('team.filename_export').date('Y-m-d-H-i-s'); + $filename = __('team.filename_export') . date('Y-m-d-H-i-s'); $headers = array( __('tables.line'), __('tables.level'), @@ -104,12 +106,13 @@ class TeamController extends Controller __('tables.phone'), __('tables.mobil'), __('tables.birthday'), + __('tables.partner_since'), __('tables.account'), __('tables.account_to'), __('tables.sponsor'), ); - if(isset($ExportBot->user_list->childs)){ - foreach ($ExportBot->user_list->childs as $child){ + if (isset($ExportBot->user_list->childs)) { + foreach ($ExportBot->user_list->childs as $child) { $columns[] = array( __('tables.line') => $child->line, __('tables.level') => $child->level_name, @@ -124,42 +127,44 @@ class TeamController extends Controller __('tables.phone') => $child->phone, __('tables.mobil') => $child->mobil, __('tables.birthday') => $child->birthday, + __('tables.partner_since') => $child->partner_since, __('tables.account') => ($child->active_account == 1 ? __('yes') : __('no')), __('tables.account_to') => $child->payment_account_date, __('tables.sponsor') => $child->sponsor_name, ); } } - return Excel::download(new UserTeamExport($columns, $headers), $filename.'.xls'); + return Excel::download(new UserTeamExport($columns, $headers), $filename . '.xls'); } } - private function setFilterVars(){ + private function setFilterVars() + { - if(!session('team_user_filter_month')){ + if (!session('team_user_filter_month')) { session(['team_user_filter_month' => intval(date('m'))]); } - if(!session('team_user_filter_year')){ + if (!session('team_user_filter_year')) { session(['team_user_filter_year' => intval(date('Y'))]); } - if(!session('team_user_points_filter_month')){ + if (!session('team_user_points_filter_month')) { session(['team_user_points_filter_month' => intval(date('m'))]); } - if(!session('team_user_points_filter_year')){ + if (!session('team_user_points_filter_year')) { session(['team_user_points_filter_year' => intval(date('Y'))]); } - - if(Request::get('team_user_filter_month')){ + + if (Request::get('team_user_filter_month')) { session(['team_user_filter_month' => Request::get('team_user_filter_month')]); } - if(Request::get('team_user_filter_year')){ + if (Request::get('team_user_filter_year')) { session(['team_user_filter_year' => Request::get('team_user_filter_year')]); } - if(Request::get('team_user_points_filter_month')){ + if (Request::get('team_user_points_filter_month')) { session(['team_user_points_filter_month' => Request::get('team_user_points_filter_month')]); } - if(Request::get('team_user_points_filter_year')){ + if (Request::get('team_user_points_filter_year')) { session(['team_user_points_filter_year' => Request::get('team_user_points_filter_year')]); } } @@ -170,46 +175,47 @@ class TeamController extends Controller $user_id = \Auth::user()->id; $query = UserSalesVolume::with('user', 'user.account')->with('shopping_order')->select('user_sales_volumes.*') - ->where('user_sales_volumes.user_id', '=', $user_id) - ->where('user_sales_volumes.month', '=', Request::get('team_user_points_filter_month')) - ->where('user_sales_volumes.year', '=', Request::get('team_user_points_filter_year')); + ->where('user_sales_volumes.user_id', '=', $user_id) + ->where('user_sales_volumes.month', '=', Request::get('team_user_points_filter_month')) + ->where('user_sales_volumes.year', '=', Request::get('team_user_points_filter_year')); return $query; } - public function datatablePoints(){ + public function datatablePoints() + { $query = $this->initSearchPoints(); return \DataTables::eloquent($query) - + ->addColumn('order', function (UserSalesVolume $UserSalesVolume) { - if($UserSalesVolume->shopping_order){ - if($UserSalesVolume->status === 1 && $UserSalesVolume->shopping_order->auth_user_id === $UserSalesVolume->user_id){ - return ''.$UserSalesVolume->shopping_order->id.''; + if ($UserSalesVolume->shopping_order) { + if ($UserSalesVolume->status === 1 && $UserSalesVolume->shopping_order->auth_user_id === $UserSalesVolume->user_id) { + return '' . $UserSalesVolume->shopping_order->id . ''; } - if(($UserSalesVolume->status === 2 || $UserSalesVolume->status === 3) && $UserSalesVolume->shopping_order->member_id === $UserSalesVolume->user_id){ - return ''.$UserSalesVolume->shopping_order->id.''; + if (($UserSalesVolume->status === 2 || $UserSalesVolume->status === 3) && $UserSalesVolume->shopping_order->member_id === $UserSalesVolume->user_id) { + return '' . $UserSalesVolume->shopping_order->id . ''; } } return ''; }) ->addColumn('total_net', function (UserSalesVolume $UserSalesVolume) { - return formatNumber($UserSalesVolume->total_net).' €'; + return formatNumber($UserSalesVolume->total_net) . ' €'; }) ->addColumn('status_turnover', function (UserSalesVolume $UserSalesVolume) { - return ''.$UserSalesVolume->getStatusTurnoverType().''; + return '' . $UserSalesVolume->getStatusTurnoverType() . ''; }) ->addColumn('status', function (UserSalesVolume $UserSalesVolume) { - return ''.$UserSalesVolume->getStatusType().''; + return '' . $UserSalesVolume->getStatusType() . ''; }) ->addColumn('message', function (UserSalesVolume $UserSalesVolume) { - return ''.$UserSalesVolume->message.''; + return '' . $UserSalesVolume->message . ''; }) ->addColumn('info', function (UserSalesVolume $UserSalesVolume) { - return ''.$UserSalesVolume->info.''; + return '' . $UserSalesVolume->info . ''; }) - + ->orderColumn('id', 'id $1') ->orderColumn('order', 'order $1') ->orderColumn('status', 'status $1') @@ -220,7 +226,8 @@ class TeamController extends Controller ->make(true); } - public function load(){ + public function load() + { $user = User::find(\Auth::user()->id); $userSalesVolume = $user->getUserSalesVolume(intval(session('team_user_points_filter_month')), intval(session('team_user_points_filter_year')), 'first'); @@ -229,9 +236,6 @@ class TeamController extends Controller 'userSalesVolume' => $userSalesVolume, ]; $html = view('user.team._points_sum', $data)->render(); - return response()->json(['response' => true, 'data'=>$data, 'html'=>$html]); - + return response()->json(['response' => true, 'data' => $data, 'html' => $html]); } - - -} \ No newline at end of file +} diff --git a/app/Http/Controllers/UserDataController.php b/app/Http/Controllers/UserDataController.php index 1a7cf78..2936081 100755 --- a/app/Http/Controllers/UserDataController.php +++ b/app/Http/Controllers/UserDataController.php @@ -64,6 +64,9 @@ class UserDataController extends Controller 'city' => 'required', 'email' => 'required|string|email|max:255|exists:users,email', 'email-confirm' => 'required|same:email', + 'bank_owner' => 'required', + 'bank_iban' => 'required', + 'bank_bic' => 'required', ); if(!Request::get('same_as_billing')){ $rules = array_merge($rules, [ diff --git a/app/Http/Controllers/Web/CardController.php b/app/Http/Controllers/Web/CardController.php index fb55deb..0dde4f2 100755 --- a/app/Http/Controllers/Web/CardController.php +++ b/app/Http/Controllers/Web/CardController.php @@ -36,7 +36,7 @@ class CardController extends Controller $cartItem = Yard::instance('shopping') ->add($product->id, $product->getLang('name'), $quantity, $product->getPriceWith(Yard::instance('shopping')->getUserTaxFree(), false, Yard::instance('shopping')->getUserCountry()), false, false, - ['image' => $image, 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points, 'no_commission' => $product->no_commission, 'no_free_shipping' => $product->no_free_shipping]); + ['image' => $image, 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points, 'no_commission' => $product->no_commission, 'no_free_shipping' => $product->no_free_shipping, 'show_on' => $product->show_on]); if(Yard::instance('shopping')->getUserTaxFree()){ Yard::setTax($cartItem->rowId, 0); }else{ @@ -65,7 +65,7 @@ class CardController extends Controller $cartItem = Yard::instance('shopping') ->add($product->id, $product->getLang('name'), $quantity, $product->getPriceWith(Yard::instance('shopping')->getUserTaxFree(), false, Yard::instance('shopping')->getUserCountry()), false, false, - ['image' => $image, 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points, 'no_commission' => $product->no_commission, 'no_free_shipping' => $product->no_free_shipping]); + ['image' => $image, 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points, 'no_commission' => $product->no_commission, 'no_free_shipping' => $product->no_free_shipping, 'show_on' => $product->show_on]); if(Yard::instance('shopping')->getUserTaxFree()){ Yard::setTax($cartItem->rowId, 0); }else{ diff --git a/app/Http/Controllers/Web/CheckoutController.php b/app/Http/Controllers/Web/CheckoutController.php index c2fbc92..3d7f0ea 100755 --- a/app/Http/Controllers/Web/CheckoutController.php +++ b/app/Http/Controllers/Web/CheckoutController.php @@ -2,114 +2,92 @@ namespace App\Http\Controllers\Web; - -use Yard; -use Request; -use App\User; -use Validator; +use App\Http\Controllers\Controller; +use App\Http\Controllers\Pay\PayoneController; +use App\Models\PaymentTransaction; +use App\Models\ShoppingOrder; +use App\Models\ShoppingPayment; +use App\Models\ShoppingUser; +use App\Repositories\CheckoutRepository; +use App\Services\AboHelper; +use App\Services\CustomerPriority; +use App\Services\OrderPaymentService; +use App\Services\Payment; use App\Services\Shop; use App\Services\Util; -use App\Models\Homeparty; -use App\Services\Payment; -use App\Services\AboHelper; -use App\Models\ShoppingUser; -use App\Models\PaymentMethod; -use App\Models\ShoppingOrder; -use App\Models\ShippingCountry; -use App\Models\ShoppingPayment; -use App\Models\ShoppingOrderItem; -use App\Models\PaymentTransaction; -use App\Services\CustomerPriority; -use Illuminate\Support\Collection; -use App\Http\Controllers\Controller; -use App\Models\ShoppingCollectOrder; -use Illuminate\Session\SessionManager; -use App\Http\Controllers\Pay\PayoneController; +use App\User; +use Illuminate\Support\Facades\Session; +use Request; +use Validator; +use Yard; class CheckoutController extends Controller { - private $session; - private $instance; + private $checkoutRepo; + /** * Create a new controller instance. * * @return void */ - public function __construct(SessionManager $session) + public function __construct(CheckoutRepository $checkoutRepository) { - $this->session = $session; - $this->instance = sprintf('%s.%s', 'cart', 'payments'); + $this->checkoutRepo = $checkoutRepository; } + /** + * Zeigt die Checkout-Seite an + * + * @return \Illuminate\View\View + */ + public function checkout() + { + $shopping_data = Yard::instance('shopping')->getYardExtra('shopping_data'); + $is_from = $shopping_data['is_from'] ?? 'shopping'; + $is_for = $shopping_data['is_for'] ?? false; + $is_abo = isset($shopping_data['is_abo']) ? (bool) $shopping_data['is_abo'] : false; + $abo_interval = $shopping_data['abo_interval'] ?? 0; + $homeparty_id = $shopping_data['homeparty_id'] ?? null; + $shopping_user = null; - public function checkout(){ - - // dump(Request::all()); -// $user_shop = Util::getUserShop(); - $shopping_data = Yard::instance('shopping')->getYardExtra('shopping_data'); - - $is_from = isset($shopping_data['is_from']) ? $shopping_data['is_from'] : 'shopping'; - $is_for = isset($shopping_data['is_for']) ? $shopping_data['is_for'] : false; - $is_abo = isset($shopping_data['is_abo']) ? (bool) $shopping_data['is_abo'] : false; - $abo_interval = isset($shopping_data['abo_interval']) ? $shopping_data['abo_interval'] : 0; - if($is_for === 'ot-customer' || $is_for === 'abo-ot-customer'){ + if ($is_for === 'ot-customer' || $is_for === 'abo-ot-customer') { $is_from = 'shopping'; - } - $homeparty_id = isset($shopping_data['homeparty_id']) ? $shopping_data['homeparty_id'] : null; - $shopping_user = null; - - if(\Session::has('new_session')){ - $this->destroy(); - \Session::forget('new_session'); - } - - if(!$this->getPayments('shopping_user_id')){ - if($shopping_data && $is_from !== 'shopping'){ - //can wizard membership user_order - //$shopping_user_id = isset($shopping_data['shopping_user_id']) ? $shopping_data['shopping_user_id'] : false; - $shopping_user = $this->shoppingUserAuthData($is_from, $is_for, $shopping_data); - $shopping_user->save(); - $this->putPayments('shopping_user_id', $shopping_user->id); - }elseif($is_from === 'shopping' && ($is_for !== 'ot-customer' || $is_for !== 'abo-ot-customer')){ - $shopping_user = new ShoppingUser(); - $shopping_user->is_for = $is_for; - $shopping_user->is_from = $is_from; - $shopping_user->homeparty_id = $homeparty_id; - $shopping_user->mode = 'prev'; - $shopping_user->language = \App::getLocale(); - }elseif($is_from === 'shopping' && ($is_for === 'ot-customer' || $is_for === 'abo-ot-customer')){ - $shopping_user = $this->makeCustomerShoppingUser($shopping_data); - $shopping_user->is_for = $is_for; - $shopping_user->is_from = $is_from; - $shopping_user->mode = 'prev'; - $shopping_user->language = \App::getLocale(); - } - }else{ - $shopping_user = ShoppingUser::findOrFail($this->getPayments('shopping_user_id')); - $shopping_user->billing_state = Shop::getCountryShippingCountryId($shopping_user->billing_country_id); - $shopping_user->shipping_state = Shop::getCountryShippingCountryId($shopping_user->shipping_country_id); - $shopping_user->same_as_billing = $shopping_user->same_as_billing ? false : true; //reinvert - } - if($shopping_user->same_as_billing === NULL){ - $shopping_user->same_as_billing = false; } - if(!$shopping_user->billing_country){ - $shopping_user->billing_country = Yard::instance('shopping')->getUserCountry(); - } - if(!$shopping_user->shipping_country){ - $shopping_user->shipping_country = Yard::instance('shopping')->getUserCountry(); + Util::setInstanceStatus(1, true); // link_check + if ($is_abo) { + $instance_status = Util::getInstanceStatus(); + if ($instance_status === 'link_paid') { + return $this->redirectToIsFinal($instance_status); + } } - if(old('selected_country') && old('selected_country') === 'change'){ - \Session::forget('_old_input.selected_country'); - $shopping_user->billing_state = old('billing_state'); - $shopping_user->shipping_state = old('shipping_state'); - }else{ - $shopping_user->billing_state = Yard::instance('shopping')->getShippingCountryId(); - $shopping_user->shipping_state = Yard::instance('shopping')->getShippingCountryId(); + if (Session::has('new_session')) { + $this->checkoutRepo->sessionDestroy(); + Session::forget('new_session'); } - $payment_methods = $this->getPaymentsMethods($is_from, $is_abo); + + if (!$this->checkoutRepo->getSessionPayments('shopping_user_id')) { + if ($shopping_data && $is_from !== 'shopping') { + $shopping_user = $this->checkoutRepo->shoppingUserAuthData($is_from, $is_for, $shopping_data); + $shopping_user->save(); + $this->checkoutRepo->putSessionPayments('shopping_user_id', $shopping_user->id); + } elseif ($is_from === 'shopping' && ($is_for !== 'ot-customer' && $is_for !== 'abo-ot-customer')) { + $shopping_user = $this->initializeShoppingUser($is_for, $is_from, $homeparty_id); + } elseif ($is_from === 'shopping' && ($is_for === 'ot-customer' || $is_for === 'abo-ot-customer')) { + $shopping_user = $this->checkoutRepo->makeCustomerShoppingUser($shopping_data); + $shopping_user->is_for = $is_for; + $shopping_user->is_from = $is_from; + $shopping_user->mode = 'prev'; + $shopping_user->language = \App::getLocale(); + } + } else { + $shopping_user = $this->getExistingShoppingUser(); + } + + $this->prepareShoppingUserData($shopping_user); + $payment_methods = $this->checkoutRepo->getPaymentsMethods($is_from, $is_abo); + $data = [ 'is_from' => $is_from, 'is_for' => $is_for, @@ -122,332 +100,394 @@ class CheckoutController extends Controller 'payment_methods' => $payment_methods['default'], 'payment_methods_active' => $payment_methods['active'], 'payment_data' => $payment_methods['data'], + 'instance_status' => $instance_status ?? false, ]; + return view('web.templates.checkout', $data); } - private function getPaymentsMethods($is_from, $is_abo = false){ - $payment_methods = []; - if($is_from !== 'shopping' && Util::getAuthUser()){ - $user = Util::getAuthUser(); - $payment_methods['default'] = $user->payment_methods; - $payment_methods['data'] = $user->account->payment_data; - }else{ - $payment_methods['default'] = PaymentMethod::getDefaultAsArray($is_abo)->toArray(); - $payment_methods['data'] = false; - } - if($is_abo){ - $payment_methods['active'] = \App\Models\PaymentMethod::where('active', true)->where('is_abo', true)->get()->pluck( 'id', 'short')->toArray(); - }else{ - $payment_methods['active'] = \App\Models\PaymentMethod::where('active', true)->get()->pluck( 'id', 'short')->toArray(); - } - return $payment_methods; - } - - private function isPaymentsMethodsActive($payment_method, $is_from, $is_abo = false){ - $payment_names = ['wlt#PPE' => 'PP', 'cc' => 'CC', 'sb#PNT' => 'SB', 'elv' => 'SEPA', 'vor' => 'VOR', 'fnc#MIV' => 'FNC']; - $payment_methods = $this->getPaymentsMethods($is_from, $is_abo); - if(isset($payment_names[$payment_method])){ - $payment_with = $payment_names[$payment_method]; - if(array_key_exists($payment_with, $payment_methods['active']) && in_array($payment_methods['active'][$payment_with], $payment_methods['default'])){ - return true; - } - } - abort(404); - } - - private function shoppingUserAuthData($is_from, $is_for, $data = []){ - - $user = Util::getAuthUser(); + /** + * Initialisiert einen neuen ShoppingUser + * + * @param string $is_for + * @param string $is_from + * @param int|null $homeparty_id + * @return ShoppingUser + */ + private function initializeShoppingUser($is_for, $is_from, $homeparty_id = null) + { $shopping_user = new ShoppingUser(); - $shopping_user->auth_user_id = $user->id; + $shopping_user->is_for = $is_for; + $shopping_user->is_from = $is_from; + $shopping_user->homeparty_id = $homeparty_id; $shopping_user->mode = 'prev'; $shopping_user->language = \App::getLocale(); - $shopping_user->billing_salutation = $user->account->salutation; - $shopping_user->billing_company = $user->account->company; - $shopping_user->billing_firstname = $user->account->first_name; - $shopping_user->billing_lastname = $user->account->last_name; - $shopping_user->billing_address = $user->account->address; - $shopping_user->billing_address_2 = $user->account->address_2; - $shopping_user->billing_zipcode = $user->account->zipcode; - $shopping_user->billing_city = $user->account->city; - $shopping_user->billing_country_id = $user->account->country_id; - $shopping_user->billing_phone = $user->account->phone; - $shopping_user->billing_email = $user->email; - $shopping_user->faker_mail = false; - $shopping_user->shipping_email = $user->email; - - $shopping_user->accepted_data_checkbox = 1; - $shopping_user->is_for = $is_for; - $shopping_user->is_from = $is_from; - $shopping_user->homeparty_id = isset($data['homeparty_id']) ? $data['homeparty_id'] : null; - $shopping_user->shopping_collect_order_id = isset($data['shopping_collect_order_id']) ? $data['shopping_collect_order_id'] : null; - - //Lieferadresse - if($is_from === 'user_order'){ - if(isset($data['shopping_user_id']) && strpos($data['is_for'], 'ot') !== false){ - $s_user = ShoppingUser::findOrFail($data['shopping_user_id']); - /* $shopping_user->billing_salutation = $s_user->billing_salutation; - $shopping_user->billing_company = $s_user->billing_company; - $shopping_user->billing_firstname = $s_user->billing_firstname; - $shopping_user->billing_lastname = $s_user->billing_lastname; - $shopping_user->billing_address = $s_user->billing_address; - $shopping_user->billing_address_2 = $s_user->billing_address_2; - $shopping_user->billing_zipcode = $s_user->billing_zipcode; - $shopping_user->billing_city = $s_user->billing_city; - $shopping_user->billing_country_id = $s_user->billing_country_id; - $shopping_user->billing_phone = $s_user->billing_phone; - $shopping_user->billing_email = $s_user->billing_email; - ;*/ - $shopping_user->faker_mail = $s_user->faker_mail; - if(!$s_user->faker_mail){ - $shopping_user->shipping_email = $s_user->billing_email; - } - $shopping_user->shopping_user_id = $data['shopping_user_id']; - $shopping_user->member_id = $s_user->member_id; - } - $shopping_user->same_as_billing = true; - $shopping_user->shipping_salutation = isset($data['shipping_salutation']) ? $data['shipping_salutation'] : ''; - $shopping_user->shipping_company = isset($data['shipping_company']) ? $data['shipping_company'] : ''; - $shopping_user->shipping_firstname = isset($data['shipping_firstname']) ? $data['shipping_firstname'] : ''; - $shopping_user->shipping_lastname = isset($data['shipping_lastname']) ? $data['shipping_lastname'] : ''; - $shopping_user->shipping_address = isset($data['shipping_address']) ? $data['shipping_address'] : ''; - $shopping_user->shipping_address_2 = isset($data['shipping_address_2']) ? $data['shipping_address_2'] : ''; - $shopping_user->shipping_zipcode = isset($data['shipping_zipcode']) ? $data['shipping_zipcode'] : ''; - $shopping_user->shipping_city = isset($data['shipping_city']) ? $data['shipping_city'] : ''; - $shopping_user->shipping_country_id = Yard::instance('shopping')->getShippingCountryCountryId(); - $shopping_user->shipping_phone = isset($data['shipping_phone']) ? $data['shipping_phone'] : ''; - - }else{ - $shopping_user->same_as_billing = $user->account->same_as_billing ? false : true; - $shopping_user->shipping_salutation = $user->account->shipping_salutation; - $shopping_user->shipping_company = $user->account->shipping_company; - $shopping_user->shipping_firstname = $user->account->shipping_firstname; - $shopping_user->shipping_lastname = $user->account->shipping_lastname; - $shopping_user->shipping_address = $user->account->shipping_address; - $shopping_user->shipping_address_2 = $user->account->shipping_address_2; - $shopping_user->shipping_zipcode = $user->account->shipping_zipcode; - $shopping_user->shipping_city = $user->account->shipping_city; - $shopping_user->shipping_country_id = $user->account->shipping_country_id; - $shopping_user->shipping_phone = $user->account->shipping_phone; - } - return $shopping_user; } - public function checkoutFinal(){ + /** + * Holt den existierenden ShoppingUser und bereitet ihn vor + * + * @return ShoppingUser + */ + private function getExistingShoppingUser() + { + $shopping_user = ShoppingUser::findOrFail($this->checkoutRepo->getSessionPayments('shopping_user_id')); + $shopping_user->billing_state = Shop::getCountryShippingCountryId($shopping_user->billing_country_id); + $shopping_user->shipping_state = Shop::getCountryShippingCountryId($shopping_user->shipping_country_id); + $shopping_user->same_as_billing = $shopping_user->same_as_billing ? false : true; // reinvert + + return $shopping_user; + } + /** + * Bereitet die ShoppingUser-Daten vor + * + * @param ShoppingUser $shopping_user + * @return void + */ + private function prepareShoppingUserData(ShoppingUser $shopping_user) + { + if ($shopping_user->same_as_billing === NULL) { + $shopping_user->same_as_billing = false; + } + + if (!$shopping_user->billing_country_id) { + $shopping_user->billing_country_id = Yard::instance('shopping')->getUserCountryId(); + // Die Zeile unten entfernen, da die Relation automatisch geladen wird + // $shopping_user->billing_country = Yard::instance('shopping')->getUserCountry(); + } + + if (!$shopping_user->shipping_country_id) { + $shopping_user->shipping_country_id = Yard::instance('shopping')->getUserCountryId(); + // Die Zeile unten entfernen, da die Relation automatisch geladen wird + // $shopping_user->shipping_country = Yard::instance('shopping')->getUserCountry(); + } + if (old('selected_country') && old('selected_country') === 'change') { + Session::forget('_old_input.selected_country'); + $shopping_user->billing_state = old('billing_state'); + $shopping_user->shipping_state = old('shipping_state'); + } else { + $shopping_user->billing_state = Yard::instance('shopping')->getShippingCountryId(); + $shopping_user->shipping_state = Yard::instance('shopping')->getShippingCountryId(); + } + } + + /** + * Verarbeitet den Checkout-Prozess + * + * @return \Illuminate\Http\RedirectResponse + */ + public function checkoutFinal() + { $data = Request::all(); - if(isset($data['payment_method'])){ - $this->isPaymentsMethodsActive($data['payment_method'], $data['is_from'], $data['is_abo']); + + if (isset($data['payment_method'])) { + $this->checkoutRepo->isPaymentsMethodsActive($data['payment_method'], $data['is_from'], $data['is_abo']); } - - //change selected Country - if(isset($data['selected_country']) && $data['selected_country'] === 'change'){ - if(!Request::get('same_as_billing')){ - Yard::instance('shopping')->setShippingCountryWithPrice($data['billing_state'], $data['is_for']); - }else{ - Yard::instance('shopping')->setShippingCountryWithPrice($data['shipping_state'], $data['is_for']); - } - return back()->withInput(Request::all()); + + Util::setInstanceStatus(2, true); // link_check + + // Länderwechsel verarbeiten + if (isset($data['selected_country']) && $data['selected_country'] === 'change') { + return $this->handleCountryChange($data); } - $rules = array( - 'billing_salutation' => 'required', - 'billing_firstname'=>'required', - 'billing_lastname'=>'required', - 'billing_email'=>'required|email', - 'billing_address'=>'required', - 'billing_zipcode'=>'required', - 'billing_city' => 'required', - 'accepted_data_checkbox' => 'accepted', - ); - - if(Request::get('same_as_billing')){ - $rules = array_merge($rules, [ - 'shipping_firstname'=>'required', - 'shipping_lastname'=>'required', - 'shipping_address'=>'required', - 'shipping_zipcode'=>'required', - 'shipping_city' => 'required', - 'shipping_salutation' => 'required' - - ]); - } - $validator = Validator::make(Request::all(), $rules); + // Validierung + $validator = $this->validateCheckoutData(); if ($validator->fails()) { return back()->withErrors($validator)->withInput(Request::all()); } - $data = Request::all(); - //make User - $shopping_user = $this->makeShoppingUser($data); - - //make Order and Items - $shopping_order = $this->makeShoppingOrder($shopping_user, $data); - - //delete session - if(\Session::has('user_shop_payment') && \Session::get('user_shop_payment') === 6){ - $user_shop_identifier = \Session::get('user_shop_identifier'); - Yard::instance('shopping')->deleteStoredCart($user_shop_identifier); - \App\Models\ShoppingInstance::where('identifier', $user_shop_identifier)->delete(); + + // Benutzer und Bestellung erstellen + $shopping_user = $this->checkoutRepo->makeShoppingUser($data); + $shopping_order = $this->checkoutRepo->makeShoppingOrder($shopping_user, $data); + + // CustomerPriority prüfen + if ($shopping_user->is_from === 'shopping') { + CustomerPriority::checkOne(ShoppingUser::find($shopping_user->id), true); } - - //CustomerPriority - if($shopping_user->is_from === 'shopping'){ - $ret = CustomerPriority::checkOne(ShoppingUser::find($shopping_user->id), true); - } - Util::setUserHistoryValue(['status'=>2, 'shopping_order_id'=>$shopping_order->id]); + + Util::setUserHistoryValue(['status' => 2, 'shopping_order_id' => $shopping_order->id]); - //check credit Card - if(Request::get('payment_method')){ - $ret = []; - //Rechnungskauf ohne PAYONE - if(Request::get('payment_method') === 'fnc#MIV'){ - - } - //need precheck the card - if(Request::get('payment_method') === 'cc'){ - $pay = new PayoneController(); - $pay->init($shopping_user, $shopping_order); - $ret['cc'] = $pay->checkCreditCard($data); - if($ret['cc']['status'] === 'ERROR' || $ret['cc']['status'] === 'INVALID'){ - /* PaymentTransaction::create([ - 'shopping_payment_id' => //is no shopping_payment_id at this moment, - 'request' => 'creditcardcheck, - 'errorcode' => $ret['cc']['errorcode'], - 'errormessage' => $ret['cc']['errormessage'], - 'customermessage' => $ret['cc']['customermessage'], - 'status' => $response['status'], - ]);*/ - \Session::flash('cc-error', 1); - \Session::flash('errormessage', $ret['cc']['errormessage']); - \Session::flash('customermessage', $ret['cc']['customermessage']); - return redirect(route('checkout.checkout_card'))->withInput(Request::all()); - } - if($ret['cc']['status'] === 'VALID'){ - /* - * array(4) { ["status"]=> string(5) "VALID" ["pseudocardpan"]=> string(19) "9410010000169020567" ["cardtype"]=> string(1) "V" ["truncatedcardpan"]=> string(16) "411111XXXXXX1111" } - * application through http post - * get this to the prepayment - * */ - } - } - - //need precheck the SEPA - if(Request::get('payment_method') === 'elv' && is_null(Request::get('mandate_identification'))){ - $pay = new PayoneController(); - $pay->init($shopping_user, $shopping_order); - $amount = Yard::instance('shopping')->totalWithShipping(2, '.', '') * 100; - $ret['elv'] = $pay->checkBankAccount($data, $amount, 'EUR', $shopping_user); - if($ret['elv']['status'] === 'ERROR' || $ret['elv']['status'] === 'INVALID'){ - /* PaymentTransaction::create([ - 'shopping_payment_id' => //is no shopping_payment_id at this moment, - 'request' => 'creditcardcheck, - 'errorcode' => $ret['cc']['errorcode'], - 'errormessage' => $ret['cc']['errormessage'], - 'customermessage' => $ret['cc']['customermessage'], - 'status' => $response['status'], - ]);*/ - \Session::flash('elv-error', 1); - \Session::flash('errormessage', $ret['elv']['errormessage']); - \Session::flash('customermessage', $ret['elv']['customermessage']); - return redirect(route('checkout.checkout_card'))->withInput(Request::all()); - } - // mandate_status active - if($ret['elv']['status'] === 'APPROVED' && $ret['elv']['mandate_status'] !== "active"){ - \Session::flash('elv-managemandate', 1); - \Session::flash('elv-mandate_identification', $ret['elv']['mandate_identification']); - \Session::flash('elv-mandate_text', $ret['elv']['mandate_text']); - \Session::flash('elv-creditor_identifier', $ret['elv']['creditor_identifier']); - return redirect(route('checkout.checkout_card'))->withInput(Request::all()); - - /* - * array(4) { ["status"]=> string(5) "VALID" ["pseudocardpan"]=> string(19) "9410010000169020567" ["cardtype"]=> string(1) "V" ["truncatedcardpan"]=> string(16) "411111XXXXXX1111" } - * application through http post - * get this to the prepayment - * */ - } - $ret['elv']['bankaccountholder'] = $data['elv_bankaccountholder']; - - } - if(Request::get('payment_method') === 'elv' && Request::get('mandate_identification')) { - $ret['elv']['mandate_identification'] = Request::get('mandate_identification'); - $ret['elv']['creditor_identifier'] = Request::get('creditor_identifier'); - $ret['elv']['iban'] = $data['elv_iban']; - $ret['elv']['bic'] = $data['elv_bic']; - $ret['elv']['bankaccountholder'] = $data['elv_bankaccountholder']; - //check abo and save the mandate - $this->storeUserPaymentsData($shopping_user, $ret); - } - //other - $pay = new PayoneController(); - $pay->init($shopping_user, $shopping_order); - $amount = Yard::instance('shopping')->totalWithShipping(2, '.', '') * 100; - $reference = $pay->setPrePayment(Request::get('payment_method'), $amount, 'EUR', $ret); - $this->putPayments('payment_reference', $reference); - $pay->setPersonalData(); - return $pay->ResponseData(); + // Zahlungsmethode verarbeiten + if (Request::get('payment_method')) { + return $this->processPaymentMethod($data, $shopping_user, $shopping_order); } return redirect()->back(); } + /** + * Verarbeitet den Länderwechsel + * + * @param array $data + * @return \Illuminate\Http\RedirectResponse + */ + private function handleCountryChange($data) + { + if (!Request::get('same_as_billing')) { + Yard::instance('shopping')->setShippingCountryWithPrice($data['billing_state'], $data['is_for']); + } else { + Yard::instance('shopping')->setShippingCountryWithPrice($data['shipping_state'], $data['is_for']); + } + + return back()->withInput(Request::all()); + } - public function transactionStatus($status, $reference){ + /** + * Validiert die Checkout-Daten + * + * @return \Illuminate\Validation\Validator + */ + private function validateCheckoutData() + { + $rules = [ + 'billing_salutation' => 'required', + 'billing_firstname' => 'required', + 'billing_lastname' => 'required', + 'billing_email' => 'required|email', + 'billing_address' => 'required', + 'billing_zipcode' => 'required', + 'billing_city' => 'required', + 'accepted_data_checkbox' => 'accepted', + ]; - $shopping_order_id = $this->getPayments('shopping_order_id'); + if (Request::get('same_as_billing')) { + $rules = array_merge($rules, [ + 'shipping_firstname' => 'required', + 'shipping_lastname' => 'required', + 'shipping_address' => 'required', + 'shipping_zipcode' => 'required', + 'shipping_city' => 'required', + 'shipping_salutation' => 'required' + ]); + } + + return Validator::make(Request::all(), $rules); + } - $ShoppingPayment = ShoppingPayment::where('shopping_order_id', $shopping_order_id)->where('reference', $reference)->first(); - if(!$ShoppingPayment){ - //TODO log this - Util::setUserHistoryValue(['status'=>21]); - \Session::flash('checkout-error', 'Der Zahlungsvorgang konnte nicht abgeschlossen werden, die Zahlung wurde nicht gefunden: '.$reference); + /** + * Verarbeitet die Zahlungsmethode + * + * @param array $data + * @param ShoppingUser $shopping_user + * @param ShoppingOrder $shopping_order + * @return mixed + */ + private function processPaymentMethod($data, $shopping_user, $shopping_order) + { + $result = []; + $payment_method = Request::get('payment_method'); + + // Kreditkarte prüfen + if ($payment_method === 'cc') { + $result = $this->checkCreditCard($data, $shopping_user, $shopping_order); + if (!isset($result['returnstatus']) || $result['returnstatus'] !== 'VALID') { + return $result; + } + } + + // SEPA prüfen + if ($payment_method === 'elv') { + $result = $this->checkSepaAccount($data, $shopping_user, $shopping_order); + if (!isset($result['returnstatus']) || $result['returnstatus'] !== 'VALID') { + return $result; + } + } + + // Zahlung vorbereiten + $pay = new PayoneController(); + $pay->init($shopping_user, $shopping_order); + $amount = Yard::instance('shopping')->totalWithShipping(2, '.', '') * 100; + $reference = $pay->setPrePayment($payment_method, $amount, 'EUR', $result); + $this->checkoutRepo->putSessionPayments('payment_reference', $reference); + $pay->setPersonalData(); + + return $pay->ResponseData(); + } + + /** + * Prüft die Kreditkartendaten + * + * @param array $data + * @param ShoppingUser $shopping_user + * @param ShoppingOrder $shopping_order + * @return bool|\Illuminate\Http\RedirectResponse + */ + private function checkCreditCard($data, $shopping_user, $shopping_order) + { + $pay = new PayoneController(); + $pay->init($shopping_user, $shopping_order); + $ret['cc'] = $pay->checkCreditCard($data); + + if ($ret['cc']['status'] === 'ERROR' || $ret['cc']['status'] === 'INVALID') { + Session::flash('cc-error', 1); + Session::flash('errormessage', $ret['cc']['errormessage']); + Session::flash('customermessage', $ret['cc']['customermessage']); + return redirect(route('checkout.checkout_card'))->withInput(Request::all()); + } + $ret['returnstatus'] = 'VALID'; + return $ret; + } + + /** + * Prüft die SEPA-Kontodaten + * + * @param array $data + * @param ShoppingUser $shopping_user + * @param ShoppingOrder $shopping_order + * @return bool|\Illuminate\Http\RedirectResponse + */ + private function checkSepaAccount($data, $shopping_user, $shopping_order) + { + if (is_null(Request::get('mandate_identification'))) { + $pay = new PayoneController(); + $pay->init($shopping_user, $shopping_order); + $amount = Yard::instance('shopping')->totalWithShipping(2, '.', '') * 100; + $ret['elv'] = $pay->checkBankAccount($data, $amount, 'EUR', $shopping_user); + + if ($ret['elv']['status'] === 'ERROR' || $ret['elv']['status'] === 'INVALID') { + Session::flash('elv-error', 1); + Session::flash('errormessage', $ret['elv']['errormessage']); + Session::flash('customermessage', $ret['elv']['customermessage']); + return redirect(route('checkout.checkout_card'))->withInput(Request::all()); + } + + if ($ret['elv']['status'] === 'APPROVED' && $ret['elv']['mandate_status'] !== "active") { + Session::flash('elv-managemandate', 1); + Session::flash('elv-mandate_identification', $ret['elv']['mandate_identification']); + Session::flash('elv-mandate_text', $ret['elv']['mandate_text']); + Session::flash('elv-creditor_identifier', $ret['elv']['creditor_identifier']); + return redirect(route('checkout.checkout_card'))->withInput(Request::all()); + } + + $ret['elv']['bankaccountholder'] = $data['elv_bankaccountholder']; + } else { + $ret['elv'] = [ + 'mandate_identification' => Request::get('mandate_identification'), + 'creditor_identifier' => Request::get('creditor_identifier'), + 'iban' => $data['elv_iban'], + 'bic' => $data['elv_bic'], + 'bankaccountholder' => $data['elv_bankaccountholder'] + ]; + + $this->storeUserPaymentsData($shopping_user, $ret); + } + $ret['returnstatus'] = 'VALID'; + return $ret; + } + + /** + * Leitet zur Abschlussseite weiter + * + * @return \Illuminate\View\View + */ + public function redirectToIsFinal() + { + $data = [ + 'user_shop' => Util::getUserShop(), + ]; + + return view('web.templates.checkout-is-final', $data); + } + + /** + * Verarbeitet den Transaktionsstatus + * + * @param string $status + * @param string $reference + * @return \Illuminate\View\View|\Illuminate\Http\RedirectResponse + */ + public function transactionStatus($status, $reference) + { + $shopping_order_id = $this->checkoutRepo->getSessionPayments('shopping_order_id'); + $ShoppingPayment = ShoppingPayment::where('shopping_order_id', $shopping_order_id) + ->where('reference', $reference) + ->first(); + + if (!$ShoppingPayment) { + Util::setUserHistoryValue(['status' => 21]); + Session::flash('checkout-error', 'Der Zahlungsvorgang konnte nicht abgeschlossen werden, die Zahlung wurde nicht gefunden: ' . $reference); return redirect(route('checkout.checkout_card')); } + $ShoppingPayment->status = $status; $ShoppingPayment->save(); - if($status === "success"){ - - Yard::instance('shopping')->destroy(); - $this->destroy(); - - $payt = $ShoppingPayment->payment_transactions->last(); - AboHelper::createNewAbo($ShoppingPayment); - $data = [ - 'user_shop' => Util::getUserShop(), - 'order_reference' => $reference, - 'pay_trans' => $payt, - ]; - return view('web.templates.checkout-final', $data); + if ($status === "success") { + return $this->handleSuccessfulTransaction($ShoppingPayment, $reference); } - if($status === "cancel"){ - Util::setUserHistoryValue(['status'=>22]); - \Session::flash('checkout-error', 'Der Zahlungsvorgang wurde abgebrochen, die Bestellung konnte nicht ausgeführt werden.'); - return redirect(route('checkout.checkout_card')); + if ($status === "cancel") { + Util::setUserHistoryValue(['status' => 22]); + Util::setInstanceStatus(5); // link_canceled + Session::flash('checkout-error', 'Der Zahlungsvorgang wurde abgebrochen, die Bestellung konnte nicht ausgeführt werden.'); + return redirect(route('checkout.checkout_card')); } - if($status === "error"){ - Util::setUserHistoryValue(['status'=>23]); - \Session::flash('checkout-error', 'Der Zahlungsvorgang wurde abgebrochen, die Bestellung konnte nicht ausgeführt werden.'); + + if ($status === "error") { + Util::setUserHistoryValue(['status' => 23]); + Util::setInstanceStatus(6); // link_failed + Session::flash('checkout-error', 'Der Zahlungsvorgang wurde abgebrochen, die Bestellung konnte nicht ausgeführt werden.'); return redirect(route('checkout.checkout_card')); - } } - public function transactionApproved($transactionId, $reference) { + /** + * Verarbeitet eine erfolgreiche Transaktion + * + * @param ShoppingPayment $ShoppingPayment + * @param string $reference + * @return \Illuminate\View\View + */ + private function handleSuccessfulTransaction($ShoppingPayment, $reference) + { + Yard::instance('shopping')->destroy(); + $this->checkoutRepo->sessionDestroy(); + Util::setInstanceStatus(3, true); // link_pending + // Abo erstellen, falls nötig + if ($ShoppingPayment->shopping_order->is_abo) { + AboHelper::createNewAbo($ShoppingPayment); + } + + $payt = $ShoppingPayment->payment_transactions->last(); + $data = [ + 'user_shop' => Util::getUserShop(), + 'order_reference' => $reference, + 'pay_trans' => $payt, + ]; + + return view('web.templates.checkout-final', $data); + } + + /** + * Verarbeitet eine genehmigte Transaktion + * + * @param int $transactionId + * @param string $reference + * @return \Illuminate\View\View + */ + public function transactionApproved($transactionId, $reference) + { $payt = PaymentTransaction::findOrFail($transactionId); - if($payt->shopping_payment->reference != $reference){ + if ($payt->shopping_payment->reference != $reference) { abort(404); } Yard::instance('shopping')->destroy(); - $this->destroy(); + $this->checkoutRepo->sessionDestroy(); + Util::setInstanceStatus(3, true); // link_pending - //Rechnung MIV - if($payt->status === 'FNCMIV'){ + // Abo erstellen, falls nötig + if ($payt->shopping_payment->shopping_order->is_abo) { + AboHelper::createNewAbo($payt->shopping_payment); + } + + // Rechnung MIV + if ($payt->status === 'FNCMIV') { $this->directPaymentStatus($payt); } @@ -456,14 +496,23 @@ class CheckoutController extends Controller 'order_reference' => $payt->shopping_payment->reference, 'pay_trans' => $payt, ]; + return view('web.templates.checkout-final', $data); } - private function storeUserPaymentsData($shopping_user, $ret){ - if($shopping_user->auth_user_id){ + /** + * Speichert die Zahlungsdaten des Benutzers + * + * @param ShoppingUser $shopping_user + * @param array $ret + * @return void + */ + private function storeUserPaymentsData($shopping_user, $ret) + { + if ($shopping_user->auth_user_id) { $user = User::find($shopping_user->auth_user_id); - if($user && $user->account){ - if(isset($ret['elv']) && is_array($ret['elv'])){ + if ($user && $user->account) { + if (isset($ret['elv']) && is_array($ret['elv'])) { $user->account->payment_data = $ret['elv']; $user->account->save(); } @@ -471,266 +520,33 @@ class CheckoutController extends Controller } } - private function makeShoppingUser($data){ - - $data['same_as_billing'] = isset($data['same_as_billing']) ? false : true; //reinvert - $data['accepted_data_checkbox'] = isset($data['accepted_data_checkbox']) ? true : false; - $shopping_user = false; - if($this->getPayments('shopping_user_id')){ - $shopping_user = ShoppingUser::find($this->getPayments('shopping_user_id')); - if($shopping_user){ - $shopping_user->fill($data); - $shopping_user->mode = null; - $shopping_user->save(); - } - } - if(!$shopping_user){ - $shopping_user = ShoppingUser::create($data); - } - $this->putPayments('shopping_user_id', $shopping_user->id); - - return $shopping_user; - } - - private function makeCustomerShoppingUser($shopping_data){ - // $shopping_user = ShoppingUser::findOrFail($shopping_data['shopping_user_id']); - $shopping_user = new ShoppingUser(); - $shopping_user->fill($shopping_data); - $shopping_user->faker_mail = false; - - $shopping_user->auth_user_id = null; - $shopping_user->homeparty_id = null; - $shopping_user->same_as_billing = $shopping_user->same_as_billing ? false : true; //reinvert - // $shopping_user->id = null; - $shopping_user->accepted_data_checkbox = 1; - - return $shopping_user; - - } - private function makeShoppingOrder($shopping_user, $data){ - - $user_shop = Util::getUserShop(); - - if($shopping_user->is_from === 'homeparty'){ - //get data - $homeparty = Homeparty::find($shopping_user->homeparty_id); - //set Data! - $total = Yard::instance('shopping')->total(2, '.', ''); //ek_price - $data = [ - 'shopping_user_id' => $shopping_user->id, - 'auth_user_id' => $shopping_user->auth_user_id, - 'country_id' => Yard::instance('shopping')->getShippingCountryId(), - 'language' => \App::getLocale(), - 'user_shop_id' => $user_shop->id, - 'payment_for' => $shopping_user->getOrderPaymentFor(), - 'homeparty_id' => $shopping_user->homeparty_id, - 'total' => $total, - 'subtotal' => $homeparty->order['ek_price_net'], - 'shipping' => $homeparty->order['shipping_price'], - 'shipping_net' => $homeparty->order['shipping_price_net'], - 'subtotal_ws' => 0, - 'tax' => $total - $homeparty->order['ek_price_net'], - 'total_shipping' => Yard::instance('shopping')->totalWithShipping(2, '.', ''), - 'points' => $homeparty->order['points'] - $homeparty->order['bonus_points_diff'], - 'weight' => 0, - 'txaction' => 'prev', - 'mode' => Util::getUserShoppingMode(), - ]; - }elseif($shopping_user->is_from === 'collection'){ - //get data - $ShoppingCollectOrder = ShoppingCollectOrder::find($shopping_user->shopping_collect_order_id); - //set Data! - $total = Yard::instance('shopping')->total(2, '.', ''); //ek_price - $data = [ - 'shopping_user_id' => $shopping_user->id, - 'auth_user_id' => $shopping_user->auth_user_id, - 'country_id' => Yard::instance('shopping')->getShippingCountryId(), - 'language' => \App::getLocale(), - 'user_shop_id' => $user_shop->id, - 'payment_for' => $shopping_user->getOrderPaymentFor(), - 'total' => $total, - 'subtotal' => $ShoppingCollectOrder->price_total_net, - 'shipping' => 0, - 'shipping_net' => 0, - 'subtotal_ws' => $ShoppingCollectOrder->price_total_net, - 'tax' => $ShoppingCollectOrder->tax_total, - 'tax_split' => $ShoppingCollectOrder->tax_split, - 'total_shipping' => Yard::instance('shopping')->totalWithShipping(2, '.', ''), - 'points' => $ShoppingCollectOrder->points, - 'weight' => 0, - 'txaction' => 'prev', - 'mode' => Util::getUserShoppingMode(), - ]; - }else{ - $data = [ - 'shopping_user_id' => $shopping_user->id, - 'auth_user_id' => $shopping_user->auth_user_id, - 'country_id' => Yard::instance('shopping')->getShippingCountryId(), - 'language' => \App::getLocale(), - 'user_shop_id' => $user_shop->id, - 'payment_for' => $shopping_user->getOrderPaymentFor(), - 'total' => Yard::instance('shopping')->total(2, '.', ''), - 'subtotal' => Yard::instance('shopping')->subtotal(2, '.', ''), - 'shipping' => Yard::instance('shopping')->shipping(2, '.', ','), - 'shipping_net' => Yard::instance('shopping')->shippingNet(2, '.', ''), - 'subtotal_ws' => Yard::instance('shopping')->subtotalWithShipping(2, '.', ''), - 'tax' => Yard::instance('shopping')->taxWithShipping(2, '.', ''), - 'total_shipping' => Yard::instance('shopping')->totalWithShipping(2, '.', ''), - 'points' => Yard::instance('shopping')->points(), - 'weight' => Yard::instance('shopping')->weight(), - 'is_abo' => isset($data['is_abo']) ? $data['is_abo'] : false, - 'abo_interval' => isset($data['abo_interval']) ? $data['abo_interval'] : null, - 'txaction' => 'prev', - 'mode' => Util::getUserShoppingMode(), - ]; - } - - $shopping_order= false; - if($this->getPayments('shopping_order_id')){ - $shopping_order = ShoppingOrder::find($this->getPayments('shopping_order_id')); - if($shopping_order){ - $shopping_order->fill($data); - $shopping_order->save(); - } - } - if(!$shopping_order){ - $shopping_order = ShoppingOrder::create($data); - if($shopping_user->is_from === 'collection' && $ShoppingCollectOrder){ - $ShoppingCollectOrder->shopping_order_id = $shopping_order->id; - $ShoppingCollectOrder->save(); - } - } - $this->putPayments('shopping_order_id', $shopping_order->id); - - $items = Yard::instance('shopping')->getContentByOrder(); - $shopping_order->shopping_order_items()->each(function($model) use ($items, $shopping_order, $shopping_user) { - foreach ($items as $item) { - if ($model->row_id === $item->rowId) { - $price_net = Yard::instance('shopping')->rowPriceNet($item, 2, '.', ''); - $tax = $item->price - $price_net; - $data = [ - 'shopping_order_id' => $shopping_order->id, - 'row_id' => $item->rowId, - 'product_id' => $item->id, - 'comp' => $item->options->comp, - 'qty' => $item->qty, - 'price' => $item->price, - 'price_net' => $price_net, - 'tax_rate' => $item->taxRate, - 'tax' => $tax, - 'price_vk_net' => $shopping_order->getPriceVkNetBy($item->id), - 'discount' => $item->options->no_commission ? 0 : $shopping_order->getUserDiscount(), - 'points' => $item->options->points, - 'slug' => $item->options->slug, - ]; - if($shopping_user->is_from === 'homeparty'){ - $data['homeparty_id'] = (int) $shopping_user->homeparty_id; - $data['product_id'] = null; - } - if($shopping_user->is_from === 'collection'){ - $data['shopping_collect_order_id'] = (int) $shopping_user->shopping_collect_order_id; - $data['product_id'] = null; - } - $model->fill($data)->save(); - return false; - } - } - return $model->delete(); - }); - foreach ($items as $item) { - if (!ShoppingOrderItem::where('shopping_order_id', $shopping_order->id)->where('row_id', $item->rowId)->count()){ - - $price_net = Yard::instance('shopping')->rowPriceNet($item, 2, '.', ''); - $tax = $item->price - $price_net; - - $data = [ - 'shopping_order_id' => $shopping_order->id, - 'row_id' => $item->rowId, - 'product_id' => $item->id, - 'comp' => $item->options->comp, - 'qty' => $item->qty, - 'price' => $item->price, - 'price_net' => $price_net, - 'tax_rate' => $item->taxRate, - 'tax' => $tax, - 'price_vk_net' => $shopping_order->getPriceVkNetBy($item->id), - 'discount' => $item->options->no_commission ? 0 : $shopping_order->getUserDiscount(), - 'points' => $item->options->points, - 'slug' => $item->options->slug - ]; - - if($shopping_user->is_from === 'homeparty'){ - $data['homeparty_id'] = (int) $shopping_user->homeparty_id; - $data['price_vk_net'] = 0; - $data['product_id'] = null; - } - if($shopping_user->is_from === 'collection'){ - $data['price_vk_net'] = 0; - $data['shopping_collect_order_id'] = (int) $shopping_user->shopping_collect_order_id; - $data['product_id'] = null; - } - $shopping_order_item = ShoppingOrderItem::create($data); - } - } - if($shopping_user->is_from === 'homeparty'){ - $shopping_order->makeHomepartyTaxSplit(); - }elseif($shopping_user->is_from === 'collection'){ - //is set on create / filll. - }else{ - $shopping_order->makeTaxSplit(); - } - return $shopping_order; - } - - private function putPayments($key, $value){ - $content = $this->getContent(); - $content->put($key, $value); - $this->session->put($this->instance, $content); - - } - - private function getPayments($key){ - $content = $this->getContent(); - if ($content->has($key)){ - return $content->get($key); - } - return false; - } - - private function getContent() + /** + * Verarbeitet den direkten Zahlungsstatus (Rechnung MIV) + * + * @param PaymentTransaction $payt + * @return void + */ + private function directPaymentStatus(PaymentTransaction $payt) { - if (is_null($this->session->get($this->instance))) { - return new Collection([]); - } - return $this->session->get($this->instance); - } - - public function destroy() - { - $this->session->remove($this->instance); - } - - //is for Rechnung MIV - private function directPaymentStatus(PaymentTransaction $payt){ - - if(isset($payt->transmitted_data['param'])){ + if (isset($payt->transmitted_data['param'])) { $shopping_order = ShoppingOrder::find($payt->transmitted_data['param']); $shopping_order->txaction = 'invoice_open'; $shopping_order->save(); + $shopping_payment = ShoppingPayment::where('reference', $payt->transmitted_data['reference'])->first(); - if($shopping_payment){ + if ($shopping_payment) { $shopping_payment->txaction = 'invoice_open'; $shopping_payment->save(); } - $send_link = Payment::paymentStatusPaidAction($shopping_order, false); + + $send_link = Payment::paymentStatusPaidAction($shopping_order, false, $shopping_payment); $data = [ - 'mode' => $payt->transmitted_data['mode'], + 'mode' => $payt->transmitted_data['mode'], 'txaction' => $payt->txaction, 'send_link' => $send_link, ]; + Payment::paymentStatusSendMail($shopping_order, $shopping_payment, $data); } - } - } \ No newline at end of file diff --git a/app/Http/Controllers/WizardController.php b/app/Http/Controllers/WizardController.php index 6b601ee..80f44c7 100755 --- a/app/Http/Controllers/WizardController.php +++ b/app/Http/Controllers/WizardController.php @@ -252,6 +252,9 @@ class WizardController extends Controller 'mobil' => 'required_without:phone', 'country_id' => 'required|integer|min:1', 'birthday' => 'required', + 'bank_owner' => 'required', + 'bank_iban' => 'required', + 'bank_bic' => 'required', ); if (!Request::get('same_as_billing')) { @@ -572,7 +575,7 @@ class WizardController extends Controller if($product->images->count()){ $image = $product->images->first()->slug; } - $cartItem = Yard::instance('shopping')->add($product->id, $product->getLang('name'), 1, $product->getPriceWith(\App\Services\UserService::getTaxFree(), false, \App\Services\UserService::$user_country), false, false, ['image' => $image, 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points, 'no_commission' => $product->no_commission]); + $cartItem = Yard::instance('shopping')->add($product->id, $product->getLang('name'), 1, $product->getPriceWith(\App\Services\UserService::getTaxFree(), false, \App\Services\UserService::$user_country), false, false, ['image' => $image, 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points, 'no_commission' => $product->no_commission, 'show_on' => $product->show_on]); if(\App\Services\UserService::getTaxFree()){ Yard::setTax($cartItem->rowId, 0); }else{ @@ -587,7 +590,7 @@ class WizardController extends Controller if($product_on_board->images->count()){ $image = $product_on_board->images->first()->slug; } - $cartItem = Yard::instance('shopping')->add($product_on_board->id, $product_on_board->getLang('name'), 1, $product_on_board->getPriceWith(\App\Services\UserService::getTaxFree(), false, \App\Services\UserService::$user_country), false, false, ['image' => $image, 'slug' => $product_on_board->slug, 'weight' => $product_on_board->weight, 'points' => $product_on_board->points, 'no_commission' => $product_on_board->no_commission]); + $cartItem = Yard::instance('shopping')->add($product_on_board->id, $product_on_board->getLang('name'), 1, $product_on_board->getPriceWith(\App\Services\UserService::getTaxFree(), false, \App\Services\UserService::$user_country), false, false, ['image' => $image, 'slug' => $product_on_board->slug, 'weight' => $product_on_board->weight, 'points' => $product_on_board->points, 'no_commission' => $product_on_board->no_commission, 'show_on' => $product_on_board->show_on]); if(\App\Services\UserService::getTaxFree()){ Yard::setTax($cartItem->rowId, 0); }else{ diff --git a/app/Http/Middleware/Checkout.php b/app/Http/Middleware/Checkout.php index f7eb56e..b263317 100755 --- a/app/Http/Middleware/Checkout.php +++ b/app/Http/Middleware/Checkout.php @@ -61,7 +61,7 @@ class Checkout Yard::instance('shopping')->setShippingCountryWithPrice($shopping_instance->country_id, $is_for); if($shopping_instance->payment !== 6){ - //delete shopping instance + //delete shopping instance is not save for restore, payment link ShoppingInstance::where('identifier', $request->route('identifier'))->delete(); } diff --git a/app/Mail/MailCheckout.php b/app/Mail/MailCheckout.php index 1ee1ef9..b13282a 100644 --- a/app/Mail/MailCheckout.php +++ b/app/Mail/MailCheckout.php @@ -17,18 +17,20 @@ class MailCheckout extends Mailable protected $shopping_payment; protected $send_link; protected $mode; + protected $payment_error; public $subject; public $data; - public function __construct($txaction, $shopping_order, $shopping_payment, $send_link, $mode) + public function __construct($txaction, $shopping_order, $shopping_payment, $send_link, $mode, $payment_error = false) { $this->txaction = $txaction; $this->shopping_order = $shopping_order; $this->shopping_payment = $shopping_payment; $this->send_link = $send_link; $this->mode = $mode; + $this->payment_error = $payment_error; if($this->txaction === 'paid'){ $this->subject = __('email.checkout_subject_paid')." "; @@ -77,6 +79,7 @@ class MailCheckout extends Mailable 'txaction' => $this->txaction, 'shopping_order' => $this->shopping_order, 'shopping_payment' => $this->shopping_payment, + 'payment_error' => $this->payment_error, 'copy3line' => __('email.checkout_copy3line'), 'greetings' => __('email.greetings'), 'sender' => __('email.sender'), diff --git a/app/Mail/MailCustomPaymet.php b/app/Mail/MailCustomPaymet.php index e9a8407..0affbe4 100644 --- a/app/Mail/MailCustomPaymet.php +++ b/app/Mail/MailCustomPaymet.php @@ -18,6 +18,8 @@ class MailCustomPaymet extends Mailable protected $mode; protected $name; protected $yard_shopping_items; + protected $is_abo; + protected $is_for; public $subject; @@ -31,9 +33,10 @@ class MailCustomPaymet extends Mailable $this->shopping_instance = $shopping_instance; $this->mode = $mode; $this->yard_shopping_items = $yard_shopping_items; - + $this->is_abo = isset($shopping_instance->shopping_data['is_abo']) ? $shopping_instance->shopping_data['is_abo'] : 0; + $this->is_for = isset($shopping_instance->shopping_data['is_for']) ? $shopping_instance->shopping_data['is_for'] : 0; $this->name = $shopping_user->member->account->first_name." ".$shopping_user->member->account->last_name." - "; - $this->subject = __('email.subject_custom_payout', ['name' => $this->name]); + $this->subject =$this->is_abo ? __('email.subject_custom_abo_payout', ['name' => $this->name]) : __('email.subject_custom_payout', ['name' => $this->name]); } @@ -43,10 +46,12 @@ class MailCustomPaymet extends Mailable return $this->view('emails.custom_payment')->with([ 'salutation' => $salutation, - 'copy1line' => __('email.your_custom_payout', ['name' => $this->name]), + 'copy1line' => $this->is_abo ? __('email.your_custom_abo_payout', ['name' => $this->name]) : __('email.your_custom_payout', ['name' => $this->name]), 'shopping_user' => $this->shopping_user, 'shopping_instance' => $this->shopping_instance, 'yard_shopping_items' => $this->yard_shopping_items, + 'is_abo' => $this->is_abo, + 'is_for' => $this->is_for, 'copy3line' => __('email.checkout_copy3line'), 'greetings' => __('email.greetings'), 'route' => $this->route, diff --git a/app/Models/Category.php b/app/Models/Category.php index a61fc67..7f62172 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -60,7 +60,7 @@ class Category extends Model 'parent_id', 'name', 'headline', 'pos', 'active', ]; - public function sluggable() + public function sluggable() : array { return [ 'slug' => [ diff --git a/app/Models/DbipLookup.php b/app/Models/DbipLookup.php index dc769ff..aecada8 100644 --- a/app/Models/DbipLookup.php +++ b/app/Models/DbipLookup.php @@ -10,13 +10,20 @@ use Illuminate\Database\Eloquent\Model; /** * Class DbipLookup - * + * * @property string $addr_type * @property string $ip_start * @property string $ip_end * @property string $country - * * @package App\Models + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup newModelQuery() + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup query() + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup whereAddrType($value) + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup whereCountry($value) + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup whereIpEnd($value) + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup whereIpStart($value) + * @mixin \Eloquent */ class DbipLookup extends Model { diff --git a/app/Models/DbipLookup2.php b/app/Models/DbipLookup2.php index 66da7f5..232be9d 100644 --- a/app/Models/DbipLookup2.php +++ b/app/Models/DbipLookup2.php @@ -10,13 +10,20 @@ use Illuminate\Database\Eloquent\Model; /** * Class DbipLookup - * + * * @property string $addr_type * @property string $ip_start * @property string $ip_end * @property string $country - * * @package App\Models + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup2 newModelQuery() + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup2 newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup2 query() + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup2 whereAddrType($value) + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup2 whereCountry($value) + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup2 whereIpEnd($value) + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup2 whereIpStart($value) + * @mixin \Eloquent */ class DbipLookup2 extends Model { diff --git a/app/Models/DbipLookup3.php b/app/Models/DbipLookup3.php index 930b559..acdb526 100644 --- a/app/Models/DbipLookup3.php +++ b/app/Models/DbipLookup3.php @@ -10,13 +10,20 @@ use Illuminate\Database\Eloquent\Model; /** * Class DbipLookup - * + * * @property string $addr_type * @property string $ip_start * @property string $ip_end * @property string $country - * * @package App\Models + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup3 newModelQuery() + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup3 newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup3 query() + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup3 whereAddrType($value) + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup3 whereCountry($value) + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup3 whereIpEnd($value) + * @method static \Illuminate\Database\Eloquent\Builder|DbipLookup3 whereIpStart($value) + * @mixin \Eloquent */ class DbipLookup3 extends Model { diff --git a/app/Models/DcCategory.php b/app/Models/DcCategory.php index 9bdcd9e..b922a1a 100644 --- a/app/Models/DcCategory.php +++ b/app/Models/DcCategory.php @@ -13,15 +13,28 @@ use Cviebrock\EloquentSluggable\Sluggable; /** * Class DcCategory - * + * * @property int $id * @property string $name * @property int $pos * @property string $slug * @property Carbon|null $created_at * @property Carbon|null $updated_at - * * @package App\Models + * @property bool $active + * @method static \Illuminate\Database\Eloquent\Builder|DcCategory findSimilarSlugs(string $attribute, array $config, string $slug) + * @method static \Illuminate\Database\Eloquent\Builder|DcCategory newModelQuery() + * @method static \Illuminate\Database\Eloquent\Builder|DcCategory newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|DcCategory query() + * @method static \Illuminate\Database\Eloquent\Builder|DcCategory whereActive($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcCategory whereCreatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcCategory whereId($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcCategory whereName($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcCategory wherePos($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcCategory whereSlug($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcCategory whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcCategory withUniqueSlugConstraints(\Illuminate\Database\Eloquent\Model $model, string $attribute, array $config, string $slug) + * @mixin \Eloquent */ class DcCategory extends Model { @@ -41,7 +54,7 @@ class DcCategory extends Model 'active' ]; - public function sluggable() + public function sluggable() : array { return [ 'slug' => [ diff --git a/app/Models/DcFile.php b/app/Models/DcFile.php index 81cf0dc..1a13af7 100644 --- a/app/Models/DcFile.php +++ b/app/Models/DcFile.php @@ -12,7 +12,7 @@ use Illuminate\Database\Eloquent\Model; /** * Class DcFile - * + * * @property int $id * @property string $filename * @property string $original_name @@ -22,10 +22,26 @@ use Illuminate\Database\Eloquent\Model; * @property int|null $active * @property Carbon|null $created_at * @property Carbon|null $updated_at - * * @property Collection|DcFileTag[] $dc_file_tags - * * @package App\Models + * @property-read int|null $dc_file_tags_count + * @property-read Collection $fileTag + * @property-read int|null $file_tag_count + * @property-read Collection $tags + * @property-read int|null $tags_count + * @method static \Illuminate\Database\Eloquent\Builder|DcFile newModelQuery() + * @method static \Illuminate\Database\Eloquent\Builder|DcFile newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|DcFile query() + * @method static \Illuminate\Database\Eloquent\Builder|DcFile whereActive($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcFile whereCreatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcFile whereExt($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcFile whereFilename($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcFile whereId($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcFile whereMine($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcFile whereOriginalName($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcFile whereSize($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcFile whereUpdatedAt($value) + * @mixin \Eloquent */ class DcFile extends Model { diff --git a/app/Models/DcFileTag.php b/app/Models/DcFileTag.php index 24d68e8..1986d6d 100644 --- a/app/Models/DcFileTag.php +++ b/app/Models/DcFileTag.php @@ -11,17 +11,24 @@ use Illuminate\Database\Eloquent\Model; /** * Class DcFileTag - * + * * @property int $id * @property int $file_id * @property int $tag_id * @property Carbon|null $created_at * @property Carbon|null $updated_at - * * @property DcFile $dc_file * @property DcTag $dc_tag - * * @package App\Models + * @method static \Illuminate\Database\Eloquent\Builder|DcFileTag newModelQuery() + * @method static \Illuminate\Database\Eloquent\Builder|DcFileTag newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|DcFileTag query() + * @method static \Illuminate\Database\Eloquent\Builder|DcFileTag whereCreatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcFileTag whereFileId($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcFileTag whereId($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcFileTag whereTagId($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcFileTag whereUpdatedAt($value) + * @mixin \Eloquent */ class DcFileTag extends Model { diff --git a/app/Models/DcTag.php b/app/Models/DcTag.php index 9cc6f0e..354ab94 100644 --- a/app/Models/DcTag.php +++ b/app/Models/DcTag.php @@ -14,7 +14,7 @@ use Cviebrock\EloquentSluggable\Sluggable; /** * Class DcTag - * + * * @property int $id * @property int|null $category_id * @property string $name @@ -22,10 +22,24 @@ use Cviebrock\EloquentSluggable\Sluggable; * @property string $slug * @property Carbon|null $created_at * @property Carbon|null $updated_at - * * @property Collection|DcFileTag[] $dc_file_tags - * * @package App\Models + * @property bool $active + * @property-read int|null $dc_file_tags_count + * @method static \Illuminate\Database\Eloquent\Builder|DcTag findSimilarSlugs(string $attribute, array $config, string $slug) + * @method static \Illuminate\Database\Eloquent\Builder|DcTag newModelQuery() + * @method static \Illuminate\Database\Eloquent\Builder|DcTag newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|DcTag query() + * @method static \Illuminate\Database\Eloquent\Builder|DcTag whereActive($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcTag whereCategoryId($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcTag whereCreatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcTag whereId($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcTag whereName($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcTag wherePos($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcTag whereSlug($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcTag whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|DcTag withUniqueSlugConstraints(\Illuminate\Database\Eloquent\Model $model, string $attribute, array $config, string $slug) + * @mixin \Eloquent */ class DcTag extends Model { @@ -47,7 +61,7 @@ class DcTag extends Model 'active' ]; - public function sluggable() + public function sluggable() : array { return [ 'slug' => [ diff --git a/app/Models/Homeparty.php b/app/Models/Homeparty.php index 95dee2a..770d678 100644 --- a/app/Models/Homeparty.php +++ b/app/Models/Homeparty.php @@ -71,6 +71,8 @@ use Illuminate\Database\Eloquent\Collection; * @method static \Illuminate\Database\Eloquent\Builder|Homeparty whereOrder($value) * @method static \Illuminate\Database\Eloquent\Builder|Homeparty whereSettings($value) * @method static \Illuminate\Database\Eloquent\Builder|Homeparty whereStep($value) + * @property array|null $trans_description + * @method static \Illuminate\Database\Eloquent\Builder|Homeparty whereTransDescription($value) * @mixin \Eloquent */ class Homeparty extends Model diff --git a/app/Models/IqImage.php b/app/Models/IqImage.php index 8e3eca8..6bdf5ae 100644 --- a/app/Models/IqImage.php +++ b/app/Models/IqImage.php @@ -51,7 +51,7 @@ class IqImage extends Model 'filename', 'original_name', 'ext', 'mine', 'size' ]; - public function sluggable() + public function sluggable() : array { return [ 'slug' => [ diff --git a/app/Models/IqSite.php b/app/Models/IqSite.php index 34eb80f..eb6e1be 100644 --- a/app/Models/IqSite.php +++ b/app/Models/IqSite.php @@ -75,7 +75,11 @@ class IqSite extends Model public function getProductModels(){ $ret = []; foreach($this->products as $product_id){ - $ret[] = Product::findOrFail($product_id); + $product = Product::findOrFail($product_id); + if($product->active){ + $ret[] = $product; + } + } return $ret; @@ -84,7 +88,10 @@ class IqSite extends Model public function getProductSetModels(){ $ret = []; foreach($this->set_products as $product_id){ - $ret[] = Product::findOrFail($product_id); + $product = Product::findOrFail($product_id); + if($product->active){ + $ret[] = $product; + } } return $ret; diff --git a/app/Models/PaymentMethod.php b/app/Models/PaymentMethod.php index d66bc69..5e1d6ef 100644 --- a/app/Models/PaymentMethod.php +++ b/app/Models/PaymentMethod.php @@ -36,6 +36,8 @@ use Illuminate\Database\Eloquent\Model; * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\PaymentMethod whereUpdatedAt($value) * @property array|null $show_on * @method static \Illuminate\Database\Eloquent\Builder|PaymentMethod whereShowOn($value) + * @property bool $is_abo + * @method static \Illuminate\Database\Eloquent\Builder|PaymentMethod whereIsAbo($value) * @mixin \Eloquent */ class PaymentMethod extends Model diff --git a/app/Models/Product.php b/app/Models/Product.php index 2fd7743..92dfc92 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -249,9 +249,8 @@ class Product extends Model 8 => 'Mitgliedschaft Berater', 9 => 'Onboarding Berater', 10 => 'zur internen Berechnung', - 12 => 'Abo-ShopBerater', - 13 => 'Abo-ShopBeraterKunden', - + 12 => 'Abo-BasisProdukt', + 13 => 'Abo-AddonProdukt', ]; public $actions = [ @@ -270,7 +269,18 @@ class Product extends Model ]; - public function sluggable() +/************* ✨ Codeium Command ⭐ *************/ + /** + * Configure the model for auto-generating a slug. + * + * This method returns an array defining the attributes used + * to generate the slug for the model. In this case, the 'name' + * attribute is used as the source for generating the slug. + * + * @return array Configuration for slug generation. + */ + +/****** e935bd41-f49b-4736-9603-2da86dc27f25 *******/ public function sluggable() : array { return [ 'slug' => [ @@ -393,23 +403,25 @@ class Product extends Model } /*price by user Factor*/ - private function calcPriceUserFactor($price){ + private function calcPriceUserFactor($price, $user=null){ if($this->no_commission){ return $price; } - if(\Auth::user() && \Auth::user()->user_level){ - $margin = ((\Auth::user()->user_level->margin -100)*-1) / 100; + $user = $user ? $user : \Auth::user(); + if($user && $user->user_level){ + $margin = (($user->user_level->margin -100)*-1) / 100; $price = $price * $margin; } return $price; } - private function calcPriceUserCommission($price){ + private function calcPriceUserCommission($price, $user){ if($this->no_commission){ return $price; } - if(\Auth::user() && \Auth::user()->user_level){ - $margin = \Auth::user()->user_level->margin; + $user = $user ? $user : \Auth::user(); + if($user && $user->user_level){ + $margin = $user->user_level->margin; $price = $price / 100 * $margin; } return $price; @@ -423,13 +435,13 @@ class Product extends Model return $price / $tax_rate; } //price calu with - public function getPriceWith(Bool $net = true, Bool $ufactor = true, $country = null, $commission=false){ + public function getPriceWith(Bool $net = true, Bool $ufactor = true, $country = null, $commission=false, $user = null){ $price = isset($this->attributes['price']) ? $this->attributes['price'] : null; $cprice = $country ? $this->getCPrice($country) : null; $price = $cprice ? $cprice : $price; $price = $net ? $this->calcPriceNet($price, $country) : $price; - $price = $ufactor ? $this->calcPriceUserFactor($price) : $price; - $price = $commission ? $this->calcPriceUserCommission($price) : $price; + $price = $ufactor ? $this->calcPriceUserFactor($price, $user) : $price; + $price = $commission ? $this->calcPriceUserCommission($price, $user) : $price; return round($price, 2); } diff --git a/app/Models/ProductImage.php b/app/Models/ProductImage.php index 85ef780..c16278b 100644 --- a/app/Models/ProductImage.php +++ b/app/Models/ProductImage.php @@ -51,7 +51,7 @@ class ProductImage extends Model 'product_id', 'filename', 'original_name', 'ext', 'mine', 'size' ]; - public function sluggable() + public function sluggable() : array { return [ 'slug' => [ diff --git a/app/Models/Setting.php b/app/Models/Setting.php index 158ed96..6a290fc 100644 --- a/app/Models/Setting.php +++ b/app/Models/Setting.php @@ -78,7 +78,7 @@ class Setting extends Model ]; - public function sluggable() + public function sluggable() : array { return [ 'slug' => [ diff --git a/app/Models/ShoppingCollectOrder.php b/app/Models/ShoppingCollectOrder.php index bdc36ec..dc84e4c 100644 --- a/app/Models/ShoppingCollectOrder.php +++ b/app/Models/ShoppingCollectOrder.php @@ -121,7 +121,7 @@ class ShoppingCollectOrder extends Model $add_tax = round($add_tax, 2); $tax_split[$tax_rate] = isset($tax_split[$tax_rate]) ? round($tax_split[$tax_rate] += $add_tax, 2) : $add_tax; - foreach($tax_split as $key=>$value){ + foreach((array)$tax_split as $key=>$value){ $tax_split[$key] = number_format($value, 2); } $this->tax_split = $tax_split; @@ -141,13 +141,31 @@ class ShoppingCollectOrder extends Model public function addShopItem($shop_item_id, $shop_item) { - $shop_item->user_price_net = number_format($shop_item->user_price_net, 2); - $shop_item->user_price_total_net = number_format($shop_item->user_price_total_net, 2); - $shop_item->user_tax = number_format($shop_item->user_tax, 2); - $shop_item->user_tax_total = number_format($shop_item->user_tax_total, 2); + $numberFields = [ + 'user_price_net', + 'user_price_total_net', + 'user_tax', + 'user_tax_total' + ]; + + $intFields = [ + 'points_total', + 'points' + ]; + + foreach ($numberFields as $field) { + if (isset($shop_item->$field)) { + $shop_item->$field = number_format($shop_item->$field, 2); + } + } + + foreach ($intFields as $field) { + if (isset($shop_item->$field)) { + $shop_item->$field = intval($shop_item->$field); + } + } $this->shop_items[$shop_item_id] = $shop_item; - } public function addOrder($order) diff --git a/app/Models/ShoppingInstance.php b/app/Models/ShoppingInstance.php index 1919222..9a3fb22 100644 --- a/app/Models/ShoppingInstance.php +++ b/app/Models/ShoppingInstance.php @@ -35,6 +35,12 @@ use Illuminate\Database\Eloquent\Model; * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ShoppingInstance whereShoppingData($value) * @property string|null $language * @method static \Illuminate\Database\Eloquent\Builder|ShoppingInstance whereLanguage($value) + * @property int|null $status + * @property float|null $amount + * @property int|null $shopping_user_id + * @method static \Illuminate\Database\Eloquent\Builder|ShoppingInstance whereAmount($value) + * @method static \Illuminate\Database\Eloquent\Builder|ShoppingInstance whereShoppingUserId($value) + * @method static \Illuminate\Database\Eloquent\Builder|ShoppingInstance whereStatus($value) * @mixin \Eloquent */ class ShoppingInstance extends Model @@ -50,14 +56,29 @@ class ShoppingInstance extends Model ]; + public $statuses = [ + 0 => 'link_sent', + 1 => 'link_openly', + 2 => 'link_check', + 3 => 'link_pending', + 4 => 'link_appointed', + 5 => 'link_failed', + 6 => 'link_canceled', + 10 => 'link_paid', + ]; + protected $table = 'shopping_instances'; - protected $casts = ['shopping_data' => 'array']; + protected $casts = ['shopping_data' => 'array', 'amount' => 'float']; protected $fillable = [ - 'identifier', 'user_shop_id', 'auth_user_id', 'payment', 'subdomain', 'language', 'country_id', 'shopping_data', 'back' + 'identifier', 'user_shop_id', 'auth_user_id', 'status', 'payment', 'subdomain', 'language', 'country_id', 'amount', 'shopping_user_id', 'shopping_data', 'back' ]; + public function getStatus(){ + return isset($this->statuses[$this->status]) ? $this->statuses[$this->status] : 'link_sent'; + } + public function getLocale(){ return $this->language ? $this->language : \App::getLocale(); } @@ -78,5 +99,11 @@ class ShoppingInstance extends Model return $this->belongsTo('App\User','auth_user_id'); } + public function getAmountFormatted(){ + return formatNumber($this->amount); + } + + + } diff --git a/app/Models/ShoppingOrder.php b/app/Models/ShoppingOrder.php index 1e20e31..861b777 100644 --- a/app/Models/ShoppingOrder.php +++ b/app/Models/ShoppingOrder.php @@ -97,6 +97,10 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @method static \Illuminate\Database\Eloquent\Builder|ShoppingOrder whereNetSplit($value) * @property string|null $language * @method static \Illuminate\Database\Eloquent\Builder|ShoppingOrder whereLanguage($value) + * @property bool|null $is_abo + * @property int|null $abo_interval + * @method static \Illuminate\Database\Eloquent\Builder|ShoppingOrder whereAboInterval($value) + * @method static \Illuminate\Database\Eloquent\Builder|ShoppingOrder whereIsAbo($value) * @mixin \Eloquent */ class ShoppingOrder extends Model @@ -281,6 +285,13 @@ class ShoppingOrder extends Model } + public function getUserAbo(){ + $UserAboOrder = UserAboOrder::where('shopping_order_id', $this->id)->first(); + if($UserAboOrder && $UserAboOrder->user_abo){ + return $UserAboOrder->user_abo; + } + return null; + } public function getLocale(){ return $this->language ? $this->language : \App::getLocale(); diff --git a/app/Models/ShoppingOrderItem.php b/app/Models/ShoppingOrderItem.php index 9173bd7..083ea19 100644 --- a/app/Models/ShoppingOrderItem.php +++ b/app/Models/ShoppingOrderItem.php @@ -83,6 +83,16 @@ class ShoppingOrderItem extends Model 'points', 'slug', ]; + protected $casts = [ + 'qty' => 'int', + 'price' => 'float', + 'price_net' => 'float', + 'tax_rate' => 'float', + 'tax' => 'float', + 'price_vk_net' => 'float', + 'discount' => 'float', + 'points' => 'int', + ]; public function shopping_order() { diff --git a/app/Models/ShoppingPayment.php b/app/Models/ShoppingPayment.php index 1abb82a..23139b8 100644 --- a/app/Models/ShoppingPayment.php +++ b/app/Models/ShoppingPayment.php @@ -40,23 +40,35 @@ use Illuminate\Database\Eloquent\Model; * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ShoppingPayment whereWallettype($value) * @property string|null $mode * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ShoppingPayment whereMode($value) + * @property array|null $carddata + * @property int|null $is_abo + * @property int|null $abo_interval + * @method static \Illuminate\Database\Eloquent\Builder|ShoppingPayment whereAboInterval($value) + * @method static \Illuminate\Database\Eloquent\Builder|ShoppingPayment whereCarddata($value) + * @method static \Illuminate\Database\Eloquent\Builder|ShoppingPayment whereIsAbo($value) * @mixin \Eloquent */ class ShoppingPayment extends Model { protected $table = 'shopping_payments'; + + protected $casts = [ + 'carddata' => 'array', + ]; protected $fillable = [ 'shopping_order_id', 'clearingtype', 'wallettype', 'onlinebanktransfertype', + 'carddata', 'reference', 'amount', 'currency', 'mode', 'is_abo', 'abo_interval', + 'identifier', ]; @@ -69,7 +81,7 @@ class ShoppingPayment extends Model { return $this->hasMany('App\Models\PaymentTransaction','shopping_payment_id'); } - + public function getPaymentType(){ if($this->clearingtype === 'wlt') { diff --git a/app/Models/ShoppingUser.php b/app/Models/ShoppingUser.php index 4124b05..a5fb39f 100644 --- a/app/Models/ShoppingUser.php +++ b/app/Models/ShoppingUser.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Services\ShoppingUserService; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; @@ -312,4 +313,8 @@ class ShoppingUser extends Model ]; } -} \ No newline at end of file + + public function getAllOrdersByMember(){ + return ShoppingUserService::getAllOrdersByMember($this); + } +} diff --git a/app/Models/SySetting.php b/app/Models/SySetting.php index bab55fa..3ff1f51 100644 --- a/app/Models/SySetting.php +++ b/app/Models/SySetting.php @@ -63,7 +63,7 @@ class SySetting extends Model 1 => 'default', ]; - public function sluggable() + public function sluggable() : array { return [ 'slug' => [ diff --git a/app/Models/UserAbo.php b/app/Models/UserAbo.php index fa3b7b1..11b582f 100644 --- a/app/Models/UserAbo.php +++ b/app/Models/UserAbo.php @@ -8,20 +8,20 @@ namespace App\Models; use App\User; use Carbon\Carbon; +use App\Services\Util; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\SoftDeletes; /** * Class UserAbo - * + * * @property int $id * @property int $user_id * @property int $payone_userid * @property string $clearingtype * @property string|null $wallettype * @property int $amount - * @property string $currency * @property bool $active * @property int $status * @property int $abo_interval @@ -32,11 +32,51 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @property Carbon|null $updated_at * @property string|null $deleted_at * @property Carbon|null $user_deleted_at - * * @property User $user * @property Collection|UserAboOrder[] $user_abo_orders - * * @package App\Models + * @property int|null $member_id + * @property int $shopping_user_id + * @property string|null $email + * @property string|null $is_for + * @property array|null $carddata + * @property \Illuminate\Support\Carbon|null $start_date + * @property \Illuminate\Support\Carbon|null $last_date + * @property \Illuminate\Support\Carbon|null $next_date + * @property-read User|null $member + * @property-read \App\Models\ShoppingUser $shopping_user + * @property-read Collection $user_abo_items + * @property-read int|null $user_abo_items_count + * @property-read int|null $user_abo_orders_count + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo newModelQuery() + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo onlyTrashed() + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo query() + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereAboInterval($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereActive($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereAmount($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereCancelDate($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereCarddata($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereClearingtype($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereCreatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereDeletedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereEmail($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereId($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereIsFor($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereLastDate($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereMemberId($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereNextDate($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo wherePayoneUserid($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereShoppingUserId($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereStartDate($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereStatus($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereUserDeletedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereUserId($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo whereWallettype($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo withTrashed() + * @method static \Illuminate\Database\Eloquent\Builder|UserAbo withoutTrashed() + * @mixin \Eloquent */ class UserAbo extends Model { @@ -45,29 +85,33 @@ class UserAbo extends Model protected $casts = [ 'user_id' => 'int', + 'member_id' => 'int', 'shopping_user_id' => 'int', 'payone_userid' => 'int', - 'amount' => 'int', 'active' => 'bool', 'status' => 'int', 'abo_interval' => 'int', + 'amount' => 'int', 'start_date' => 'datetime', 'last_date' => 'datetime', 'next_date' => 'datetime', 'cancel_date' => 'datetime', - 'count' => 'int', - 'user_deleted_at' => 'datetime' + 'user_deleted_at' => 'datetime', + 'carddata' => 'array' + ]; protected $fillable = [ 'user_id', + 'member_id', 'shopping_user_id', 'is_for', + 'email', 'payone_userid', 'clearingtype', 'wallettype', + 'carddata', 'amount', - 'currency', 'active', 'status', 'abo_interval', @@ -75,13 +119,43 @@ class UserAbo extends Model 'last_date', 'next_date', 'cancel_date', - 'count', 'user_deleted_at' ]; + public static $aboDeliveryDays = [5, 10, 20, 25]; + + public static $statusTypes = [ + 0 => 'abo_new', + 1 => 'abo_new', + 2 => 'abo_okay', + 3 => 'abo_hold', + 4 => 'abo_cancel', + 5 => 'abo_finish', + 6 => 'abo_inactive', + 7 => 'abo_grace' + ]; + + public static $statusColors = [ + 0 => 'success', + 1 => 'success', + 2 => 'secondary', + 3 => 'warning', + 4 => 'danger', + 5 => 'info', + 6 => 'warning', + 7 => 'danger' + ]; + + + public function user() { - return $this->belongsTo(User::class); + return $this->belongsTo(User::class, 'user_id'); + } + + public function member() + { + return $this->belongsTo(User::class, 'member_id'); } public function shopping_user() @@ -89,12 +163,21 @@ class UserAbo extends Model return $this->belongsTo('App\Models\ShoppingUser','shopping_user_id'); } - public function user_abo_orders() { return $this->hasMany(UserAboOrder::class); } + public function user_abo_items() + { + return $this->hasMany(UserAboItem::class); + } + + public function getCountOrders(){ + //sind bezahlte Bestellungen + return $this->user_abo_orders->where('status', '>=', 2)->count(); + } + public function setStartDateAttribute( $value ) { $this->attributes['start_date'] = isset($value) ? (new Carbon($value))->format('Y-m-d') : NULL; } @@ -127,5 +210,29 @@ class UserAbo extends Model return $this->attributes['cancel_date'] ? Carbon::parse($this->attributes['cancel_date'])->format(\Util::formatDateDB()) : ''; } + public function getFormattedAmount() + { + return isset($this->attributes['amount']) ? Util::formatNumber($this->attributes['amount']/100) : ""; + } + public function getIsForFormated() + { + return $this->attributes['is_for'] === 'me' ? ''.__('tables.adviser').'' : ''.__('tables.customer').''; + } + + public function getStatusFormated(){ + return ''.$this->getStatusType().''; + } + + public function getStatusType(){ + return isset(self::$statusTypes[$this->status]) ? __('abo.'.self::$statusTypes[$this->status]) : ""; + } + + public function getStatusColor(){ + return isset(self::$statusColors[$this->status]) ? self::$statusColors[$this->status] : "default"; + } + + public function getPaymentType(){ + return $this->clearingtype === 'wlt' ? __('payment.paypal') : __('payment.credit_card'); + } } diff --git a/app/Models/UserAboItem.php b/app/Models/UserAboItem.php new file mode 100644 index 0000000..fa539cb --- /dev/null +++ b/app/Models/UserAboItem.php @@ -0,0 +1,90 @@ + 'int', + 'product_id' => 'int', + 'comp' => 'int', + 'qty' => 'int', + 'status' => 'int' + ]; + + protected $fillable = [ + 'user_abo_id', + 'product_id', + 'comp', + 'qty', + 'status' + ]; + + public function product() + { + return $this->belongsTo(Product::class); + } + + public function user_abo() + { + return $this->belongsTo(UserAbo::class); + } + + public function getPrice() + { + $ufactor = $this->user_abo->is_for === 'me' ? true : false; + $tax_free = $ufactor ? true : Yard::instance('shopping')->getUserTaxFree(); + $userCountry = Yard::instance('shopping')->getUserCountry(); + return $this->product->getPriceWith($tax_free, $ufactor, $userCountry); + } + + + public function getFormattedPrice(){ + /** der Preis wird für den User berechnet */ + return Util::formatNumber($this->getPrice()); + } + + + public function getFormattedTotalPrice(){ + /** der Preis wird für den User berechnet */ + return Util::formatNumber($this->getPrice() * $this->qty); + } +} diff --git a/app/Models/UserAboOrder.php b/app/Models/UserAboOrder.php index c6ad621..76a542d 100644 --- a/app/Models/UserAboOrder.php +++ b/app/Models/UserAboOrder.php @@ -12,18 +12,26 @@ use Illuminate\Database\Eloquent\Model; /** * Class UserAboOrder - * + * * @property int $id * @property int $user_abo_id * @property int $shopping_order_id * @property int $status * @property Carbon|null $created_at * @property Carbon|null $updated_at - * * @property ShoppingOrder $shopping_order * @property UserAbo $user_abo - * * @package App\Models + * @method static \Illuminate\Database\Eloquent\Builder|UserAboOrder newModelQuery() + * @method static \Illuminate\Database\Eloquent\Builder|UserAboOrder newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|UserAboOrder query() + * @method static \Illuminate\Database\Eloquent\Builder|UserAboOrder whereCreatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAboOrder whereId($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAboOrder whereShoppingOrderId($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAboOrder whereStatus($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAboOrder whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserAboOrder whereUserAboId($value) + * @mixin \Eloquent */ class UserAboOrder extends Model { @@ -42,6 +50,30 @@ class UserAboOrder extends Model 'status' ]; + public static $statusTypes = [ + 0 => 'abo_new', + 1 => 'abo_new', + 2 => 'abo_okay', + 3 => 'abo_hold', + 4 => 'abo_cancel', + 5 => 'abo_finish', + 6 => 'abo_inactive', + 7 => 'abo_grace' + ]; + + public static $statusColors = [ + 0 => 'success', + 1 => 'success', + 2 => 'secondary', + 3 => 'warning', + 4 => 'danger', + 5 => 'info', + 6 => 'warning', + 7 => 'danger' + ]; + + + public function shopping_order() { return $this->belongsTo(ShoppingOrder::class); @@ -51,4 +83,17 @@ class UserAboOrder extends Model { return $this->belongsTo(UserAbo::class); } + + public function getStatusFormated(){ + return ''.$this->getStatusType().''; + } + + public function getStatusType(){ + return isset(self::$statusTypes[$this->status]) ? __('abo.'.self::$statusTypes[$this->status]) : ""; + } + + public function getStatusColor(){ + return isset(self::$statusColors[$this->status]) ? self::$statusColors[$this->status] : "default"; + } + } diff --git a/app/Models/UserBusiness.php b/app/Models/UserBusiness.php index a7171ff..0ebede7 100644 --- a/app/Models/UserBusiness.php +++ b/app/Models/UserBusiness.php @@ -119,6 +119,10 @@ use Illuminate\Database\Eloquent\Casts\AsArrayObject; * @method static \Illuminate\Database\Eloquent\Builder|UserBusiness whereSalesVolumePointsTPSum($value) * @method static \Illuminate\Database\Eloquent\Builder|UserBusiness whereSalesVolumeTPPoints($value) * @method static \Illuminate\Database\Eloquent\Builder|UserBusiness whereVersion($value) + * @property string|null $user_birthday + * @property string|null $user_phone + * @method static \Illuminate\Database\Eloquent\Builder|UserBusiness whereUserBirthday($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserBusiness whereUserPhone($value) * @mixin \Eloquent */ class UserBusiness extends Model diff --git a/app/Models/UserCreditItem.php b/app/Models/UserCreditItem.php index 5599d62..e57d9d3 100644 --- a/app/Models/UserCreditItem.php +++ b/app/Models/UserCreditItem.php @@ -40,6 +40,10 @@ use Illuminate\Database\Eloquent\Model; * @method static \Illuminate\Database\Eloquent\Builder|UserCreditItem whereUserBusinessId($value) * @method static \Illuminate\Database\Eloquent\Builder|UserCreditItem whereUserCreditId($value) * @method static \Illuminate\Database\Eloquent\Builder|UserCreditItem whereUserId($value) + * @property int|null $from_month + * @property int|null $from_year + * @method static \Illuminate\Database\Eloquent\Builder|UserCreditItem whereFromMonth($value) + * @method static \Illuminate\Database\Eloquent\Builder|UserCreditItem whereFromYear($value) * @mixin \Eloquent */ class UserCreditItem extends Model diff --git a/app/Models/UserHistory.php b/app/Models/UserHistory.php index 771ad62..c9b4db5 100644 --- a/app/Models/UserHistory.php +++ b/app/Models/UserHistory.php @@ -42,6 +42,8 @@ use App\User; * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\UserHistory whereIdentifier($value) * @property int|null $abo_options * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\UserHistory whereAboOptions($value) + * @property int|null $is_abo + * @method static \Illuminate\Database\Eloquent\Builder|UserHistory whereIsAbo($value) * @mixin \Eloquent */ class UserHistory extends Model diff --git a/app/Models/UserShop.php b/app/Models/UserShop.php index 7351c56..e1169d6 100644 --- a/app/Models/UserShop.php +++ b/app/Models/UserShop.php @@ -65,6 +65,8 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @method static \Illuminate\Database\Query\Builder|\App\Models\UserShop withTrashed() * @method static \Illuminate\Database\Query\Builder|\App\Models\UserShop withoutTrashed() * @method static \Illuminate\Database\Eloquent\Builder|UserShop withUniqueSlugConstraints(\Illuminate\Database\Eloquent\Model $model, string $attribute, array $config, string $slug) + * @property array|null $trans + * @method static \Illuminate\Database\Eloquent\Builder|UserShop whereTrans($value) * @mixin \Eloquent */ class UserShop extends Model @@ -87,7 +89,7 @@ class UserShop extends Model protected $dates = ['deleted_at']; use Sluggable; - public function sluggable() + public function sluggable() : array { return [ 'slug' => [ diff --git a/app/Models/UserShopOnSite.php b/app/Models/UserShopOnSite.php index 43f0f22..0e147d5 100644 --- a/app/Models/UserShopOnSite.php +++ b/app/Models/UserShopOnSite.php @@ -46,7 +46,7 @@ class UserShopOnSite extends Model 'user_shop_id', 'filename', 'original_name', 'ext', 'mine', 'size' ]; - public function sluggable() + public function sluggable() : array { return [ 'slug' => [ diff --git a/app/Policies/AppServiceProvider.php b/app/Policies/AppServiceProvider.php deleted file mode 100755 index d1f2928..0000000 --- a/app/Policies/AppServiceProvider.php +++ /dev/null @@ -1,72 +0,0 @@ -can('view-any-' . $this->getModelClass()); - } - - public function view(User $user, Model $model) - { - if ($user->can('view-' . $this->getModelClass())) { - return true; - } - - if ($user->can('view-self-' . $this->getModelClass())) { - return $this->isOwner($user, $model); - } - - return false; - } - - public function create(User $user) - { - return $user->can('create-' . $this->getModelClass()); - } - - public function update(User $user, Model $model) - { - if ($user->can('update-' . $this->getModelClass())) { - return true; - } - - if ($user->can('update-self-' . $this->getModelClass())) { - return $this->isOwner($user, $model); - } - - return false; - } - - public function delete(User $user, Model $model) - { - if ($user->can('delete-' . $this->getModelClass())) { - return true; - } - - if ($user->can('delete-self-' . $this->getModelClass())) { - return $this->isOwner($user, $model); - } - - return false; - } - - private function isOwner(User $user, Model $model): bool - { - if (!empty($user) && method_exists($model, 'user')) { - return $user->getKey() === $model->getRelation('user')->getKey(); - } - - return false; - } -} \ No newline at end of file diff --git a/app/Repositories/AboRepository.php b/app/Repositories/AboRepository.php new file mode 100644 index 0000000..188e9cb --- /dev/null +++ b/app/Repositories/AboRepository.php @@ -0,0 +1,89 @@ +model = $model; + } + + + public function setModel(UserAbo $model){ + $this->model = $model; + } + + public function update($data) + { + if(isset($data['action'])){ + if($data['action'] === 'abo_update_settings'){ + if($this->validate($data)){ + $this->updateStatus($data); + $this->model->abo_interval = $data['abo_interval']; + $this->model->next_date = AboHelper::setNextDate(now(), $data['abo_interval']); + $this->model ->save(); + \Session()->flash('alert-success', 'Einstellungen gespeichert'); + return true; + } + return false; + } + } + return false; + } + + public function create($data){ + + } + + private function updateStatus($data){ + + $active = (isset($data['abo_is_active']) && $data['abo_is_active']) ? true : false; + //if status is active and active is false, set status to inactive + if($this->model->active && !$active){ + if($this->model->status = 2){ //okay + $this->model->status = 6; // + } + } + if(!$this->model->active && $active){ + if($this->model->status = 6){ //inactive + $this->model->status = 2; //okay + } + } + $this->model->active = $active; + return; + } + + private function validate($data){ + if($data['view'] !== 'admin'){ + if($this->model->is_for === 'me' && $this->model->user_id !== \Auth::user()->id){ + \Session()->flash('alert-error', 'Unauthorized action. User ID does not match.'); + return false; + } + if($this->model->is_for === 'ot' && $this->model->member_id !== \Auth::user()->id){ + \Session()->flash('alert-error', 'Unauthorized action. User ID does not match.'); + return false; + } + if($data['view'] === 'me' && $this->model->is_for !== 'me'){ + \Session()->flash('alert-error', 'Unauthorized action. Is not for me'); + return false; + } + if($data['view'] === 'ot' && $this->model->is_for !== 'ot'){ + \Session()->flash('alert-error', 'Unauthorized action. Is not your customer'); + return false; + } + } + if(!in_array($data['abo_interval'], \App\Models\UserAbo::$aboDeliveryDays)){ + //to check if user is not admin + \Session()->flash('alert-error', __('abo.error_abo_interval')); + return false; + } + return true; + } + +} \ No newline at end of file diff --git a/app/Repositories/CheckoutRepository.php b/app/Repositories/CheckoutRepository.php new file mode 100644 index 0000000..75e0288 --- /dev/null +++ b/app/Repositories/CheckoutRepository.php @@ -0,0 +1,376 @@ +session = $session; + $this->instance = sprintf('%s.%s', 'cart', 'payments'); + } + + public function makeShoppingOrder($shopping_user, $data){ + + $user_shop = Util::getUserShop(); + + if($shopping_user->is_from === 'homeparty'){ + //get data + $homeparty = Homeparty::find($shopping_user->homeparty_id); + //set Data! + $total = Yard::instance('shopping')->total(2, '.', ''); //ek_price + $data = [ + 'shopping_user_id' => $shopping_user->id, + 'auth_user_id' => $shopping_user->auth_user_id, + 'country_id' => Yard::instance('shopping')->getShippingCountryId(), + 'language' => \App::getLocale(), + 'user_shop_id' => $user_shop->id, + 'payment_for' => $shopping_user->getOrderPaymentFor(), + 'homeparty_id' => $shopping_user->homeparty_id, + 'total' => $total, + 'subtotal' => $homeparty->order['ek_price_net'], + 'shipping' => $homeparty->order['shipping_price'], + 'shipping_net' => $homeparty->order['shipping_price_net'], + 'subtotal_ws' => 0, + 'tax' => $total - $homeparty->order['ek_price_net'], + 'total_shipping' => Yard::instance('shopping')->totalWithShipping(2, '.', ''), + 'points' => $homeparty->order['points'] - $homeparty->order['bonus_points_diff'], + 'weight' => 0, + 'txaction' => 'prev', + 'mode' => Util::getUserShoppingMode(), + ]; + }elseif($shopping_user->is_from === 'collection'){ + //get data + $ShoppingCollectOrder = ShoppingCollectOrder::find($shopping_user->shopping_collect_order_id); + //set Data! + $total = Yard::instance('shopping')->total(2, '.', ''); //ek_price + $data = [ + 'shopping_user_id' => $shopping_user->id, + 'auth_user_id' => $shopping_user->auth_user_id, + 'country_id' => Yard::instance('shopping')->getShippingCountryId(), + 'language' => \App::getLocale(), + 'user_shop_id' => $user_shop->id, + 'payment_for' => $shopping_user->getOrderPaymentFor(), + 'total' => $total, + 'subtotal' => $ShoppingCollectOrder->price_total_net, + 'shipping' => 0, + 'shipping_net' => 0, + 'subtotal_ws' => $ShoppingCollectOrder->price_total_net, + 'tax' => $ShoppingCollectOrder->tax_total, + 'tax_split' => $ShoppingCollectOrder->tax_split, + 'total_shipping' => Yard::instance('shopping')->totalWithShipping(2, '.', ''), + 'points' => $ShoppingCollectOrder->points, + 'weight' => 0, + 'txaction' => 'prev', + 'mode' => Util::getUserShoppingMode(), + ]; + }else{ + $data = [ + 'shopping_user_id' => $shopping_user->id, + 'auth_user_id' => $shopping_user->auth_user_id, + 'country_id' => Yard::instance('shopping')->getShippingCountryId(), + 'language' => \App::getLocale(), + 'user_shop_id' => $user_shop->id, + 'payment_for' => $shopping_user->getOrderPaymentFor(), + 'total' => Yard::instance('shopping')->total(2, '.', ''), + 'subtotal' => Yard::instance('shopping')->subtotal(2, '.', ''), + 'shipping' => Yard::instance('shopping')->shipping(2, '.', ','), + 'shipping_net' => Yard::instance('shopping')->shippingNet(2, '.', ''), + 'subtotal_ws' => Yard::instance('shopping')->subtotalWithShipping(2, '.', ''), + 'tax' => Yard::instance('shopping')->taxWithShipping(2, '.', ''), + 'total_shipping' => Yard::instance('shopping')->totalWithShipping(2, '.', ''), + 'points' => Yard::instance('shopping')->points(), + 'weight' => Yard::instance('shopping')->weight(), + 'is_abo' => isset($data['is_abo']) ? $data['is_abo'] : false, + 'abo_interval' => isset($data['abo_interval']) ? $data['abo_interval'] : null, + 'txaction' => 'prev', + 'mode' => Util::getUserShoppingMode(), + ]; + } + + $shopping_order= false; + if($this->getSessionPayments('shopping_order_id')){ + $shopping_order = ShoppingOrder::find($this->getSessionPayments('shopping_order_id')); + if($shopping_order){ + $shopping_order->fill($data); + $shopping_order->save(); + } + } + if(!$shopping_order){ + $shopping_order = ShoppingOrder::create($data); + if($shopping_user->is_from === 'collection' && $ShoppingCollectOrder){ + $ShoppingCollectOrder->shopping_order_id = $shopping_order->id; + $ShoppingCollectOrder->save(); + } + } + $this->putSessionPayments('shopping_order_id', $shopping_order->id); + + $items = Yard::instance('shopping')->getContentByOrder(); + $shopping_order->shopping_order_items()->each(function($model) use ($items, $shopping_order, $shopping_user) { + foreach ($items as $item) { + if ($model->row_id === $item->rowId) { + $price_net = Yard::instance('shopping')->rowPriceNet($item, 2, '.', ''); + $tax = $item->price - $price_net; + $data = [ + 'shopping_order_id' => $shopping_order->id, + 'row_id' => $item->rowId, + 'product_id' => $item->id, + 'comp' => $item->options->comp, + 'qty' => $item->qty, + 'price' => $item->price, + 'price_net' => $price_net, + 'tax_rate' => $item->taxRate, + 'tax' => $tax, + 'price_vk_net' => $shopping_order->getPriceVkNetBy($item->id), + 'discount' => $item->options->no_commission ? 0 : $shopping_order->getUserDiscount(), + 'points' => $item->options->points, + 'slug' => $item->options->slug, + ]; + if($shopping_user->is_from === 'homeparty'){ + $data['homeparty_id'] = (int) $shopping_user->homeparty_id; + $data['product_id'] = null; + } + if($shopping_user->is_from === 'collection'){ + $data['shopping_collect_order_id'] = (int) $shopping_user->shopping_collect_order_id; + $data['product_id'] = null; + } + $model->fill($data)->save(); + return false; + } + } + return $model->delete(); + }); + foreach ($items as $item) { + if (!ShoppingOrderItem::where('shopping_order_id', $shopping_order->id)->where('row_id', $item->rowId)->count()){ + + $price_net = Yard::instance('shopping')->rowPriceNet($item, 2, '.', ''); + $tax = $item->price - $price_net; + + $data = [ + 'shopping_order_id' => $shopping_order->id, + 'row_id' => $item->rowId, + 'product_id' => $item->id, + 'comp' => $item->options->comp, + 'qty' => $item->qty, + 'price' => $item->price, + 'price_net' => $price_net, + 'tax_rate' => $item->taxRate, + 'tax' => $tax, + 'price_vk_net' => $shopping_order->getPriceVkNetBy($item->id), + 'discount' => $item->options->no_commission ? 0 : $shopping_order->getUserDiscount(), + 'points' => $item->options->points, + 'slug' => $item->options->slug + ]; + + if($shopping_user->is_from === 'homeparty'){ + $data['homeparty_id'] = (int) $shopping_user->homeparty_id; + $data['price_vk_net'] = 0; + $data['product_id'] = null; + } + if($shopping_user->is_from === 'collection'){ + $data['price_vk_net'] = 0; + $data['shopping_collect_order_id'] = (int) $shopping_user->shopping_collect_order_id; + $data['product_id'] = null; + } + $shopping_order_item = ShoppingOrderItem::create($data); + } + } + if($shopping_user->is_from === 'homeparty'){ + $shopping_order->makeHomepartyTaxSplit(); + }elseif($shopping_user->is_from === 'collection'){ + //is set on create / filll. + }else{ + $shopping_order->makeTaxSplit(); + } + return $shopping_order; + } + public function makeShoppingUser($data){ + + $data['same_as_billing'] = isset($data['same_as_billing']) ? false : true; //reinvert + $data['accepted_data_checkbox'] = isset($data['accepted_data_checkbox']) ? true : false; + $shopping_user = false; + if($this->getSessionPayments('shopping_user_id')){ + $shopping_user = ShoppingUser::find($this->getSessionPayments('shopping_user_id')); + if($shopping_user){ + $shopping_user->fill($data); + $shopping_user->mode = null; + $shopping_user->save(); + } + } + if(!$shopping_user){ + $shopping_user = ShoppingUser::create($data); + } + $this->putSessionPayments('shopping_user_id', $shopping_user->id); + + return $shopping_user; + } + + public function getPaymentsMethods($is_from, $is_abo = false){ + $payment_methods = []; + if($is_from !== 'shopping' && Util::getAuthUser()){ + $user = Util::getAuthUser(); + $payment_methods['default'] = $user->payment_methods; + $payment_methods['data'] = $user->account->payment_data; + }else{ + $payment_methods['default'] = PaymentMethod::getDefaultAsArray($is_abo)->toArray(); + $payment_methods['data'] = false; + } + if($is_abo){ + $payment_methods['active'] = \App\Models\PaymentMethod::where('active', true)->where('is_abo', true)->get()->pluck( 'id', 'short')->toArray(); + }else{ + $payment_methods['active'] = \App\Models\PaymentMethod::where('active', true)->get()->pluck( 'id', 'short')->toArray(); + } + return $payment_methods; + } + + public function isPaymentsMethodsActive($payment_method, $is_from, $is_abo = false){ + $payment_names = ['wlt#PPE' => 'PP', 'cc' => 'CC', 'sb#PNT' => 'SB', 'elv' => 'SEPA', 'vor' => 'VOR', 'fnc#MIV' => 'FNC']; + $payment_methods = $this->getPaymentsMethods($is_from, $is_abo); + if(isset($payment_names[$payment_method])){ + $payment_with = $payment_names[$payment_method]; + if(array_key_exists($payment_with, $payment_methods['active']) && in_array($payment_methods['active'][$payment_with], $payment_methods['default'])){ + return true; + } + } + abort(404); + } + + public function makeCustomerShoppingUser($shopping_data){ + // $shopping_user = ShoppingUser::findOrFail($shopping_data['shopping_user_id']); + $shopping_user = new ShoppingUser(); + $shopping_user->fill($shopping_data); + $shopping_user->faker_mail = false; + $shopping_user->auth_user_id = null; + $shopping_user->homeparty_id = null; + $shopping_user->same_as_billing = $shopping_user->same_as_billing ? false : true; //reinvert + // $shopping_user->id = null; + $shopping_user->accepted_data_checkbox = 1; + return $shopping_user; + + } + + public function shoppingUserAuthData($is_from, $is_for, $data = []){ + + $user = Util::getAuthUser(); + $shopping_user = new ShoppingUser(); + $shopping_user->auth_user_id = $user->id; + $shopping_user->mode = 'prev'; + $shopping_user->language = \App::getLocale(); + + $shopping_user->billing_salutation = $user->account->salutation; + $shopping_user->billing_company = $user->account->company; + $shopping_user->billing_firstname = $user->account->first_name; + $shopping_user->billing_lastname = $user->account->last_name; + $shopping_user->billing_address = $user->account->address; + $shopping_user->billing_address_2 = $user->account->address_2; + $shopping_user->billing_zipcode = $user->account->zipcode; + $shopping_user->billing_city = $user->account->city; + $shopping_user->billing_country_id = $user->account->country_id; + $shopping_user->billing_phone = $user->account->phone; + $shopping_user->billing_email = $user->email; + $shopping_user->faker_mail = false; + $shopping_user->shipping_email = $user->email; + + $shopping_user->accepted_data_checkbox = 1; + $shopping_user->is_for = $is_for; + $shopping_user->is_from = $is_from; + $shopping_user->homeparty_id = isset($data['homeparty_id']) ? $data['homeparty_id'] : null; + $shopping_user->shopping_collect_order_id = isset($data['shopping_collect_order_id']) ? $data['shopping_collect_order_id'] : null; + + //Lieferadresse + if($is_from === 'user_order'){ + if(isset($data['shopping_user_id']) && strpos($data['is_for'], 'ot') !== false){ + $s_user = ShoppingUser::findOrFail($data['shopping_user_id']); + /* $shopping_user->billing_salutation = $s_user->billing_salutation; + $shopping_user->billing_company = $s_user->billing_company; + $shopping_user->billing_firstname = $s_user->billing_firstname; + $shopping_user->billing_lastname = $s_user->billing_lastname; + $shopping_user->billing_address = $s_user->billing_address; + $shopping_user->billing_address_2 = $s_user->billing_address_2; + $shopping_user->billing_zipcode = $s_user->billing_zipcode; + $shopping_user->billing_city = $s_user->billing_city; + $shopping_user->billing_country_id = $s_user->billing_country_id; + $shopping_user->billing_phone = $s_user->billing_phone; + $shopping_user->billing_email = $s_user->billing_email; + ;*/ + $shopping_user->faker_mail = $s_user->faker_mail; + if(!$s_user->faker_mail){ + $shopping_user->shipping_email = $s_user->billing_email; + } + $shopping_user->shopping_user_id = $data['shopping_user_id']; + $shopping_user->member_id = $s_user->member_id; + } + $shopping_user->same_as_billing = true; + $shopping_user->shipping_salutation = isset($data['shipping_salutation']) ? $data['shipping_salutation'] : ''; + $shopping_user->shipping_company = isset($data['shipping_company']) ? $data['shipping_company'] : ''; + $shopping_user->shipping_firstname = isset($data['shipping_firstname']) ? $data['shipping_firstname'] : ''; + $shopping_user->shipping_lastname = isset($data['shipping_lastname']) ? $data['shipping_lastname'] : ''; + $shopping_user->shipping_address = isset($data['shipping_address']) ? $data['shipping_address'] : ''; + $shopping_user->shipping_address_2 = isset($data['shipping_address_2']) ? $data['shipping_address_2'] : ''; + $shopping_user->shipping_zipcode = isset($data['shipping_zipcode']) ? $data['shipping_zipcode'] : ''; + $shopping_user->shipping_city = isset($data['shipping_city']) ? $data['shipping_city'] : ''; + $shopping_user->shipping_country_id = Yard::instance('shopping')->getShippingCountryCountryId(); + $shopping_user->shipping_phone = isset($data['shipping_phone']) ? $data['shipping_phone'] : ''; + + }else{ + $shopping_user->same_as_billing = $user->account->same_as_billing ? false : true; + $shopping_user->shipping_salutation = $user->account->shipping_salutation; + $shopping_user->shipping_company = $user->account->shipping_company; + $shopping_user->shipping_firstname = $user->account->shipping_firstname; + $shopping_user->shipping_lastname = $user->account->shipping_lastname; + $shopping_user->shipping_address = $user->account->shipping_address; + $shopping_user->shipping_address_2 = $user->account->shipping_address_2; + $shopping_user->shipping_zipcode = $user->account->shipping_zipcode; + $shopping_user->shipping_city = $user->account->shipping_city; + $shopping_user->shipping_country_id = $user->account->shipping_country_id; + $shopping_user->shipping_phone = $user->account->shipping_phone; + } + + return $shopping_user; + } + + public function putSessionPayments($key, $value){ + $content = $this->getContent(); + $content->put($key, $value); + $this->session->put($this->instance, $content); + + } + + public function getSessionPayments($key){ + + $content = $this->getContent(); + if ($content->has($key)){ + return $content->get($key); + } + return false; + } + + public function sessionDestroy() + { + $this->session->remove($this->instance); + } + + private function getContent() + { + if (is_null($this->session->get($this->instance))) { + return new Collection([]); + } + return $this->session->get($this->instance); + } +} \ No newline at end of file diff --git a/app/Repositories/DC/FileRepository.php b/app/Repositories/DC/FileRepository.php index 054f432..b274e71 100644 --- a/app/Repositories/DC/FileRepository.php +++ b/app/Repositories/DC/FileRepository.php @@ -2,24 +2,36 @@ namespace App\Repositories\DC; -use Imagick; -use Request; + use App\Models\DcFile; use App\Services\Util; use App\Models\DcFileTag; use App\Repositories\BaseRepository; use Intervention\Image\Facades\Image; - +use Imagick; class FileRepository extends BaseRepository { + private const ALLOWED_IMAGE_TYPES = [ + 'image/jpeg', + 'image/gif', + 'image/png' + ]; + + private const ALLOWED_PDF_TYPES = [ + 'application/pdf' + ]; - public function __construct() - { - } + private const THUMB_WIDTH = 542; + private const THUMB_HEIGHT = 360; + private const BIG_WIDTH = 1600; + private const BIG_HEIGHT = 900; - public function uploadFile( $form_data ) + public function uploadFile(array $form_data): DcFile { + if (!isset($form_data['file']) || !$form_data['file']->isValid()) { + throw new \InvalidArgumentException('Invalid file provided'); + } $file = $form_data['file']; $originalName = $file->getClientOriginalName(); $extension = $file->getClientOriginalExtension(); @@ -43,109 +55,163 @@ class FileRepository extends BaseRepository { return $dc_file; } - public function makeThumb($id){ + public function makeThumb(int $id): bool + { $file = DcFile::findOrFail($id); $this->makeThumbFromFile($file); + return true; } - public function makeThumbFromFile($file) + public function makeThumbFromFile(DcFile $file): bool { - $path = $file->getFile(true); - $filename = $file->filename; - $mine = \File::mimeType($path); - //make thumb - $allowedMimeTypes = ['image/jpeg','image/gif','image/png']; - if (in_array($mine, $allowedMimeTypes)) { - $img = Image::make($path); - $img->resize(542, 360, function ($c) { - $c->aspectRatio(); - $c->upsize(); - }); - \Storage::disk('public')->put('dc/thumb/'.basename($filename), (string) $img->encode()); - - $img = Image::make($path); - $img->resize(1600, 900, function ($c) { - $c->aspectRatio(); - $c->upsize(); - }); - \Storage::disk('public')->put('dc/big/'.basename($filename), (string) $img->encode()); - } - - $allowedMimeTypes = ['application/pdf']; - if (in_array($mine, $allowedMimeTypes)) { - $imagick = new \Imagick ($path.'[0]'); // 0 specifies the first page of the pdf - $imagick->setImageBackgroundColor('#ffffff'); - $imagick = $imagick->mergeImageLayers( Imagick::LAYERMETHOD_FLATTEN ); - $imagick->setImageFormat('jpg'); // set the format of the output image - $imagick->setImageCompression(\Imagick::COMPRESSION_JPEG); - $imagick->setImageCompressionQuality(60); - - $imagick->resizeImage(1600, 900, \Imagick::FILTER_LANCZOS, 1,1); - $filestore = \Storage::disk('public')->path('dc/big/').basename($filename).".jpg"; - $imagick->writeImage($filestore); - - $imagick->resizeImage(542, 360, \Imagick::FILTER_LANCZOS, 1,1); - $filestore = \Storage::disk('public')->path('dc/thumb/').basename($filename).".jpg"; - $imagick->writeImage($filestore); - - } - - return true; - } - - public function tagsUpdate($id, $tags){ - $file = DcFile::findOrFail($id); - $file_tags = DcFileTag::where('file_id', $file->id)->get(); - - //remove Tags - foreach ($file_tags as $file_tag) { - if(is_array($tags) && ($pos = array_search($file_tag->tag_id, $tags)) !== FALSE){ - unset($tags[$pos]); - }else{ - $file_tag->delete(); + try { + $path = $file->getFile(true); + if (!file_exists($path)) { + throw new \Exception('File not found'); } - } - //set taTagsgs - if(is_array($tags)){ - foreach ($tags as $key => $tag_id) { - DcFileTag::create([ - 'file_id' => $file->id, - 'tag_id' => $tag_id - ]); - } - } + + $filename = $file->filename; + $mime = \File::mimeType($path); + + if (in_array($mime, self::ALLOWED_IMAGE_TYPES)) { + $this->processImage($path, $filename); + } elseif (in_array($mime, self::ALLOWED_PDF_TYPES)) { + $this->processPdf($path, $filename); + } + + return true; + } catch (\Exception $e) { + \Log::error('Thumbnail creation failed: ' . $e->getMessage()); + return false; + } + } + + private function processImage(string $path, string $filename): void + { + // Thumbnail + $img = Image::make($path); + $img->resize(542, 360, function ($c) { + $c->aspectRatio(); + $c->upsize(); + }); + \Storage::disk('public')->put('dc/thumb/'.basename($filename), (string) $img->encode()); + + // Big image + $img = Image::make($path); + $img->resize(1600, 900, function ($c) { + $c->aspectRatio(); + $c->upsize(); + }); + \Storage::disk('public')->put('dc/big/'.basename($filename), (string) $img->encode()); + } + + private function processPdf(string $path, string $filename): void + { + try { + // PDF mit höherer Auflösung rendern + $imagick = new \Imagick(); + $imagick->setResolution(300, 300); + $imagick->readImage($path.'[0]'); + + // Grundlegende Bildoptimierungen + $imagick->setImageBackgroundColor('#ffffff'); + $imagick->mergeImageLayers(\Imagick::LAYERMETHOD_FLATTEN); + $imagick->setImageFormat('jpg'); + $imagick->setImageCompression(\Imagick::COMPRESSION_JPEG); + $imagick->setImageCompressionQuality(80); + + // Große Version erstellen + $bigImage = clone $imagick; + $bigImage->resizeImage(self::BIG_WIDTH, self::BIG_HEIGHT, \Imagick::FILTER_LANCZOS, 1, true); + $bigImage->writeImage(\Storage::disk('public')->path('dc/big/').basename($filename).'.jpg'); + $bigImage->clear(); + + // Thumbnail erstellen + $imagick->resizeImage(self::THUMB_WIDTH, self::THUMB_HEIGHT, \Imagick::FILTER_LANCZOS, 1, true); + $imagick->writeImage(\Storage::disk('public')->path('dc/thumb/').basename($filename).'.jpg'); + + // Ressourcen freigeben + $imagick->clear(); + } catch (\ImagickException $e) { + \Log::error('PDF Verarbeitung fehlgeschlagen: ' . $e->getMessage()); + throw new \RuntimeException('PDF Verarbeitung fehlgeschlagen: ' . $e->getMessage()); + } finally { + if (isset($bigImage)) { + $bigImage->destroy(); + } + if (isset($imagick)) { + $imagick->destroy(); + } + } + } + + public function tagsUpdate($id, array $tags = []): bool + { + $file = DcFile::findOrFail($id); + + // Get existing tags + $existingTags = DcFileTag::where('file_id', $file->id) + ->pluck('tag_id') + ->toArray(); + + // Delete removed tags + $tagsToDelete = array_diff($existingTags, $tags); + if (!empty($tagsToDelete)) { + DcFileTag::where('file_id', $file->id) + ->whereIn('tag_id', $tagsToDelete) + ->delete(); + } + + // Add new tags + $tagsToAdd = array_diff($tags, $existingTags); + $newTags = []; + foreach ($tagsToAdd as $tagId) { + $newTags[] = [ + 'file_id' => $file->id, + 'tag_id' => $tagId + ]; + } + + if (!empty($newTags)) { + DcFileTag::insert($newTags); + } + return true; } - public function deleteThumb($id){ - $file = DcFile::findOrFail($id); - $path_thumb = $file->getThumb(true); - if (file_exists($path_thumb)) { - unlink($path_thumb); - } - $path_big = $file->getBig(true); - if (file_exists($path_big)) { - unlink($path_big); - } - return true; - } - - public function deleteFile($id){ - $file = DcFile::findOrFail($id); - $path_thumb = $file->getThumb(true); - if (file_exists($path_thumb)) { - unlink($path_thumb); - } - $path_big = $file->getBig(true); - if (file_exists($path_big)) { - unlink($path_big); - } - $path = $file->getFile(true); + private function deleteFileIfExists(string $path): void + { if (file_exists($path)) { unlink($path); } - $file->delete(); - return true; + } + + public function deleteThumb($id): bool + { + try { + $file = DcFile::findOrFail($id); + $this->deleteFileIfExists($file->getThumb(true)); + $this->deleteFileIfExists($file->getBig(true)); + return true; + } catch (\Exception $e) { + \Log::error('Thumbnail deletion failed: ' . $e->getMessage()); + return false; + } + } + + public function deleteFile(int $id): bool + { + try { + $file = DcFile::findOrFail($id); + $this->deleteFileIfExists($file->getThumb(true)); + $this->deleteFileIfExists($file->getBig(true)); + $this->deleteFileIfExists($file->getFile(true)); + $file->delete(); + return true; + } catch (\Exception $e) { + \Log::error('File deletion failed: ' . $e->getMessage()); + return false; + } } } \ No newline at end of file diff --git a/app/Repositories/FileRepository.php b/app/Repositories/FileRepository.php index d64f497..1880879 100644 --- a/app/Repositories/FileRepository.php +++ b/app/Repositories/FileRepository.php @@ -89,47 +89,5 @@ class FileRepository extends BaseRepository { ], 200); } - /* public function createFile(Request $request) - { - $locale = \App::getLocale(); - $data = [ - 'step' => 2, - 'locale' => $locale, - ]; - $rules = array( - 'network_name' => 'required|max:255', - 'input_file_now' => 'required|mimes:png,pdf,jpg,jpeg|max:30000' - ); - $validator = Validator::make(Request::all(), $rules); - - if ($validator->fails()) { - // get the error messages from the validator - $messages = $validator->messages(); - // redirect our user back to the form with the errors from the validator - return view('user.register_complete', $data)->withErrors($validator); - - } else { - $user = \Auth::user(); - if(!$user->account->network_name){ - $file = request()->file('input_file_now'); - //$ext = $file->guessClientExtension(); - //$file->storeAs('user/' . $user->id .'/verification'); - $data = $file->store('user/' . $user->id .'/verification'); - $account = $user->account; - $account->network_name = Input::get('network_name'); - $account->network_verification = basename($data); - $account->save(); - - $user->role_id = 2; //set as User by default! - $user->save(); - - - } - - return redirect('complete_register'); - //return view('user.register_complete', $data); - } - }*/ - } \ No newline at end of file diff --git a/app/Repositories/ProductRepository.php b/app/Repositories/ProductRepository.php index 69c39c1..7e577dc 100644 --- a/app/Repositories/ProductRepository.php +++ b/app/Repositories/ProductRepository.php @@ -34,12 +34,12 @@ class ProductRepository extends BaseRepository { $data['sponsor_buying_points'] = isset($data['sponsor_buying_points']) ? 1 : 0; $data['show_on'] = isset($data['show_on']) ? $data['show_on'] : null; - if($data['id'] === "new"){ $this->model = Product::create($data); } else{ $this->model = $this->getById($data['id']); + $this->model->slug = null; $this->model->fill($data); $this->model->save(); } diff --git a/app/Services/AboHelper.php b/app/Services/AboHelper.php index dfcca27..823bff7 100644 --- a/app/Services/AboHelper.php +++ b/app/Services/AboHelper.php @@ -1,48 +1,158 @@ 'paymend_paid', + 'appointed' => 'paymend_open', + 'failed' => 'paymend_failed', + 'extern' => 'extern_open', //offen + 'extern_paid' => 'extern_paid', + 'invoice_open' => 'invoice_open', + 'invoice_paid' => 'invoice_paid', + 'invoice_non' => 'invoice_no_payment', + 'NULL' => 'no_payment', + ]; + + public static function userHasAbo(User $user){ + $user = $user ? $user : \Auth::user(); + return UserAbo::where('user_id', $user->id)->where('is_for', 'me')->where('status', '>', 1)->first() === null ? false : true; + } + + public static function memberHasAbo(ShoppingUser $shopping_user){ + if(!$shopping_user){ + return false; + } + return UserAbo::where('email', $shopping_user->billing_email)->where('is_for', 'ot')->where('status', '>', 1)->first() === null ? false : true; + } + + public static function hasAboByEmail($email){ + return UserAbo::where('email', $email)->where('status', '>', 1)->first() === null ? false : true; + } + + public static function setAboStatus(ShoppingOrder $shopping_order, $status){ + $user_abo = $shopping_order->getUserAbo(); + if($user_abo && $user_abo->status < 2){ //status < 2 is not active + $user_abo->update(['status' => $status]); + } + UserAboOrder::where('user_abo_id', $user_abo->id)->where('shopping_order_id', $shopping_order->id)->update(['status' => $status]); + } + public static function setAboActive(ShoppingOrder $shopping_order, $status){ + self::setAboStatus($shopping_order, $status); + + //delete UserAbo is not active status = 1 + //is_for = me + UserAbo::where('user_id', $shopping_order->auth_user_id)->where('is_for', 'me')->where('status', 1)->delete(); + //is_for = ot + UserAbo::where('member_id', $shopping_order->member_id)->where('email', $shopping_order->shopping_user->billing_email)->where('is_for', 'ot')->where('status', 1)->delete(); + + } + + public static function aboHasBaseProduct($yard_products){ + foreach($yard_products as $product){ + if(is_array($product->options->show_on)){ + if(in_array('12', $product->options->show_on)){ + return true; + } + } + } + return false; + } + public static function getAboShowOn(Product $product){ + $show_on = $product->show_on; + if(in_array('12', $show_on)){ + return 'base'; + } + if(in_array('13', $show_on)){ + return 'upgrade'; + } + return false; + } + public static function getAboTypeBadge($abo_type){ + if($abo_type === 'base'){ + return ' '.__('abo.'.$abo_type).''; + } + if($abo_type === 'upgrade'){ + return ' '.__('abo.'.$abo_type).''; + } + return ''; + } + + public static function setNextDate($date, $abo_interval){ + $nextDate = Carbon::parse($date)->firstOfMonth(); + $nextDate->addDays($abo_interval-1); + return $nextDate->gt($date) ? $nextDate : $nextDate->addMonth(1); + } + public static function createNewAbo(ShoppingPayment $shopping_payment){ + //is Abo - create init Abo from PP or else + if($shopping_payment->shopping_order->is_abo && $shopping_payment->shopping_order->abo_interval > 0){ + $payment_transaction = $shopping_payment->payment_transactions->last(); - $payment_transaction = $shopping_payment->payment_transactions->last(); - $user_abo = UserAbo::create([ - 'user_id' => $shopping_payment->shopping_order->auth_user_id, - 'shopping_user_id' => $shopping_payment->shopping_order->shopping_user_id, - 'is_for' => $shopping_payment->shopping_order->shopping_user->is_for, - 'payone_userid' => $payment_transaction->userid, - 'clearingtype' => $shopping_payment->clearingtype, - 'wallettype' => $shopping_payment->wallettype, - 'amount' => $shopping_payment->amount, - 'currency' => $shopping_payment->currency, - 'status' => 1, - 'abo_interval' => $shopping_payment->abo_interval, - 'start_date' => now(), - 'last_date' => now(), - 'next_date' => now()->addWeeks($shopping_payment->abo_interval), - 'next_abo_date' => $shopping_payment->created_at->addMonths($shopping_payment->abo_interval), - 'count' => 1, - ]); - if($user_abo){ - UserAboOrder::create([ + $user_abo = UserAbo::create([ + 'user_id' => $shopping_payment->shopping_order->auth_user_id, + 'member_id' => $shopping_payment->shopping_order->member_id, + 'shopping_user_id' => $shopping_payment->shopping_order->shopping_user_id, + 'email' => $shopping_payment->shopping_order->shopping_user->billing_email, + 'is_for' => $shopping_payment->shopping_order->shopping_user->is_for, + 'payone_userid' => $payment_transaction->userid, + 'clearingtype' => $shopping_payment->clearingtype, + 'wallettype' => $shopping_payment->wallettype, + 'carddata' => $shopping_payment->carddata, + 'amount' => $shopping_payment->amount, + 'status' => 1, + 'abo_interval' => $shopping_payment->abo_interval, + 'start_date' => now(), + 'last_date' => now(), + 'next_date' => self::setNextDate(now(), $shopping_payment->abo_interval), + ]); + + if($user_abo){ + self::createAboItems($user_abo, $shopping_payment); + UserAboOrder::create([ + 'user_abo_id' => $user_abo->id, + 'shopping_order_id' => $shopping_payment->shopping_order_id, + 'status' => 1, + ]); + } + } + + } + + public static function createAboItems($user_abo, ShoppingPayment $shopping_payment){ + foreach($shopping_payment->shopping_order->shopping_order_items as $item){ + UserAboItem::create([ 'user_abo_id' => $user_abo->id, - 'shopping_order_id' => $shopping_payment->shopping_order_id, + 'product_id' => $item->product_id, + 'comp' => $item->comp ?? 0, + 'qty' => $item->qty, 'status' => 1, ]); } } + public static function getTransStatusFilterText(){ + $ret = []; + foreach(self::$txaction_filter_text as $key=>$val){ + $ret[$key] = trans('payment.'.$val); + } + return $ret; + } + } \ No newline at end of file diff --git a/app/Services/AboOrderCart.php b/app/Services/AboOrderCart.php new file mode 100644 index 0000000..b87ff88 --- /dev/null +++ b/app/Services/AboOrderCart.php @@ -0,0 +1,201 @@ +destroy(); + self::$customer_detail = self::makeCustomerDetail($user_abo); + if($user_abo->is_for === 'me'){ + self::$is_for = 'abo-me'; + if($user_abo->user && $user_abo->user->account->same_as_billing){ + $country_id = $user_abo->user->account->country_id; + }else{ + $country_id = $user_abo->user->account->shipping_country_id; + } + if($country_id && $shipping_country = ShippingCountry::whereCountryId($country_id)->first()){ + if($shipping_country->shipping && $shipping_country->shipping->active){ + UserService::initUserYard($user_abo->user, $shipping_country->id, 'abo-me'); + return true; + } + } + abort(403, 'Fehler: Versandland nicht gefunden'); + } + if($user_abo->is_for === 'ot'){ + self::$is_for = 'abo-ot-customer'; + UserService::initCustomerYard(self::$customer_detail, 'abo-ot-customer'); + return true; + + } + + return false; + + } + + public static function makeOrderYard($user_abo) + { + self::$user_abo = $user_abo; + if($user_abo->is_for === 'ot'){ + self::$is_for = 'abo-ot-customer'; + } + if($user_abo->is_for === 'me'){ + self::$is_for = 'abo-me'; + } + foreach($user_abo->user_abo_items as $abo_item){ + self::addProductToCart($abo_item); + } + Yard::instance('shopping')->reCalculateShippingPrice(); + + $user_abo->amount = Yard::instance('shopping')->totalWithShipping(2, '.', '')*100; + $user_abo->save(); + } + + private static function addProductToCart($item){ + + $product = Product::find($item->product_id); + $tax_free = Yard::instance('shopping')->getUserTaxFree(); + $user_country = Yard::instance('shopping')->getUserCountry(); + + if($product){ + if($item->comp){ + $cartItem = Yard::instance('shopping')->add($product->id, $product->getLang('name'), 1, 0, false, false, + ['image' => '', 'slug' => $product->slug, 'weight' => 0, 'points' => 0, + 'comp' => $item->comp, 'product_id' => $product->id]); + Yard::setTax($cartItem->rowId, 0); + return true; + } + if(self::$is_for === 'ot-customer' || self::$is_for === 'abo-ot-customer'){ + $cartItem = Yard::instance('shopping') + ->add($product->id, $product->getLang('name'), $item->qty, + round($product->getPriceWith($tax_free, false, $user_country, false, self::$user_abo->user), 1), false, false, + ['image' => '', 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points, 'no_commission' => $product->no_commission, 'show_on' => $product->show_on]); + }else{ + $cartItem = Yard::instance('shopping') + ->add($product->id, $product->getLang('name'), $item->qty, + $product->getPriceWith($tax_free, true, $user_country, false, self::$user_abo->user), false, false, + ['image' => '', 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points, 'no_commission' => $product->no_commission, 'show_on' => $product->show_on]); + } + if($tax_free){ + Yard::setTax($cartItem->rowId, 0); + }else{ + Yard::setTax($cartItem->rowId, $product->getTaxWith($user_country)); + } + } + } + + public static function checkNumOfCompProducts($user_abo){ + + if($user_abo->is_for === 'me'){ + $needNumComp = Yard::instance('shopping')->getNumComp(); + if($needNumComp > 0){ + $UserAboItems = UserAboItem::where('user_abo_id', $user_abo->id)->where('comp', '>', 0)->get(); + if(count($UserAboItems) === $needNumComp){ + return true; + } + + //need to add + if(count($UserAboItems) < $needNumComp){ + $product = Product::whereActive(true)->where('shipping_addon', true)->whereJsonContains('show_on', '12')->orderBy('pos', 'DESC')->first(); + for($i = count($UserAboItems); $i <= $needNumComp; $i++){ + $UserAboItem = UserAboItem::create([ + 'user_abo_id' => $user_abo->id, + 'product_id' => $product->id, + 'comp' => $i + 1, + 'qty' => 1, + 'status' => 1, + ]); + self::addProductToCart($UserAboItem); + } + } + //need to remove + if(count($UserAboItems) > $needNumComp){ + foreach($UserAboItems as $UserAboItem){ + if($UserAboItem->comp > $needNumComp){ + $UserAboItem->delete(); + } + } + foreach (Yard::instance('shopping')->content() as $row) { + if($row->options->comp > $needNumComp) { + Yard::instance('shopping')->remove($row->rowId); + } + } + } + } + } + } + + public static function getCustomerDetail(){ + return self::$customer_detail; + } + + /* Need this, can change the address */ + public static function makeCustomerDetail($user_abo){ + + if($user_abo->is_for === 'me'){ + //only on Abo! + $user = $user_abo->user; + $shopping_user = new ShoppingUser(); + $shopping_user->billing_salutation = $user->account->salutation; + $shopping_user->billing_company = $user->account->company; + $shopping_user->billing_firstname = $user->account->first_name; + $shopping_user->billing_lastname = $user->account->last_name; + $shopping_user->billing_address = $user->account->address; + $shopping_user->billing_address_2 = $user->account->address_2; + $shopping_user->billing_zipcode = $user->account->zipcode; + $shopping_user->billing_city = $user->account->city; + $shopping_user->billing_country_id = $user->account->country_id; + $shopping_user->billing_phone = $user->account->phone; + + if($user->account->same_as_billing){ + $shopping_user->shipping_salutation = $user->account->salutation; + $shopping_user->shipping_company = $user->account->company; + $shopping_user->shipping_firstname = $user->account->first_name; + $shopping_user->shipping_lastname = $user->account->last_name; + $shopping_user->shipping_address = $user->account->address; + $shopping_user->shipping_address_2 = $user->account->address_2; + $shopping_user->shipping_zipcode = $user->account->zipcode; + $shopping_user->shipping_city = $user->account->city; + $shopping_user->shipping_country_id = $user->account->country_id; + $shopping_user->shipping_phone = $user->account->phone; + }else{ + $shopping_user->shipping_salutation = $user->account->shipping_salutation; + $shopping_user->shipping_company = $user->account->shipping_company; + $shopping_user->shipping_firstname = $user->account->shipping_firstname; + $shopping_user->shipping_lastname = $user->account->shipping_lastname; + $shopping_user->shipping_address = $user->account->shipping_address; + $shopping_user->shipping_address_2 = $user->account->shipping_address_2; + $shopping_user->shipping_zipcode = $user->account->shipping_zipcode; + $shopping_user->shipping_city = $user->account->shipping_city; + $shopping_user->shipping_country_id = $user->account->shipping_country_id; + $shopping_user->shipping_phone = $user->account->shipping_phone; + } + + } + + if($user_abo->is_for === 'ot'){ + //look for the primary user of this abo + $shopping_user = $user_abo->shopping_user->replicate(); + } + return $shopping_user; + } + +} \ No newline at end of file diff --git a/app/Services/BusinessPlan/ExportBot.php b/app/Services/BusinessPlan/ExportBot.php index 0d6a936..c56b340 100644 --- a/app/Services/BusinessPlan/ExportBot.php +++ b/app/Services/BusinessPlan/ExportBot.php @@ -1,4 +1,5 @@ init_from = $init_from; } - public function initStructureUser(User $user, $order='list') //tree or list + public function initStructureUser(User $user, $order = 'list') //tree or list { $line = 0; $this->order = $order; $this->root_user = $user; - - if($this->order === 'tree'){ - $this->user_tree = $this->setUserValues($user, $line); - $this->user_tree->childs = $this->readChildUsers($this->user_tree, $line+1); - } - if($this->order === 'list'){ - $this->user_list = $this->setUserValues($user, $line); - $this->readChildUsers($this->user_list, $line+1); - } - + if ($this->order === 'tree') { + $this->user_tree = $this->setUserValues($user, $line); + $this->user_tree->childs = $this->readChildUsers($this->user_tree, $line + 1); + } + if ($this->order === 'list') { + $this->user_list = $this->setUserValues($user, $line); + $this->readChildUsers($this->user_list, $line + 1); + } } - private function readChildUsers($parent_user, $line){ + private function readChildUsers($parent_user, $line) + { $childUsers = []; $users = User::with('account')->select('users.*') @@ -55,24 +55,25 @@ class ExportBot ->where('users.active', "=", 1) ->get(); - if($users){ - foreach($users as $user){ + if ($users) { + foreach ($users as $user) { $user_values = $this->setUserValues($user, $line); - $childUsers[] = $user_values; - if($this->order === 'list'){ + $childUsers[] = $user_values; + if ($this->order === 'list') { $this->user_list->childs[] = $user_values; - $this->readChildUsers($user_values, $line+1); - } + $this->readChildUsers($user_values, $line + 1); + } } } return $childUsers; } - private function setUserValues(User $user, $line){ + private function setUserValues(User $user, $line) + { $sponsor_name = ""; - if($user->m_sponsor && $user->user_sponsor->account){ - $sponsor_name = $user->user_sponsor->account->m_first_name." ".$user->user_sponsor->account->m_last_name; + if ($user->m_sponsor && $user->user_sponsor->account) { + $sponsor_name = $user->user_sponsor->account->m_first_name . " " . $user->user_sponsor->account->m_last_name; } $obj = new stdClass(); $obj->line = $line; @@ -93,28 +94,28 @@ class ExportBot $obj->zipcode = $user->account->zipcode; $obj->city = $user->account->city; $obj->country_id = $user->account->country_id ? $user->account->country->getLocated() : ""; - $pre_phone = $user->account->pre_phone_id != "" ? $user->account->pre_phone->phone." " : ""; - $pre_mobil = $user->account->pre_mobil_id != "" ? $user->account->pre_mobil->phone." " : ""; - $obj->phone = $pre_phone.$user->account->phone; - $obj->mobil = $pre_mobil.$user->account->mobil; + $pre_phone = $user->account->pre_phone_id != "" ? $user->account->pre_phone->phone . " " : ""; + $pre_mobil = $user->account->pre_mobil_id != "" ? $user->account->pre_mobil->phone . " " : ""; + $obj->phone = $pre_phone . $user->account->phone; + $obj->mobil = $pre_mobil . $user->account->mobil; $obj->birthday = $user->account->birthday; + $obj->partner_since = $user->active_date ? $user->getActiveDateFormat(false) : ""; - if($this->order === 'tree'){ - $obj->childs = $this->readChildUsers($obj, $line+1); + if ($this->order === 'tree') { + $obj->childs = $this->readChildUsers($obj, $line + 1); } - if($this->order === 'list'){ + if ($this->order === 'list') { $obj->childs = []; } - + return $obj; } - - - public function getUser(){ + + + public function getUser() + { return $this->root_user; } - - } diff --git a/app/Services/BusinessPlan/SalesPointsVolumeHelper.php b/app/Services/BusinessPlan/SalesPointsVolumeHelper.php index 71d8e63..2c11ee7 100644 --- a/app/Services/BusinessPlan/SalesPointsVolumeHelper.php +++ b/app/Services/BusinessPlan/SalesPointsVolumeHelper.php @@ -15,7 +15,8 @@ class SalesPointsVolumeHelper line: nach reihenfolge sortiert, */ private static $business_users_line = []; - + private static $totalcommission = []; + private static $totalpoints = []; private static $cbot = null; @@ -36,7 +37,6 @@ class SalesPointsVolumeHelper $deep = 0; $ret = ""; foreach(self::$cbot->business_users as $business_user){ - $ret .= self::addTableItemStructur($business_user, $deep); } return $ret; @@ -68,7 +68,7 @@ class SalesPointsVolumeHelper
'.$pp.'
'.$item->first_name.' '.$item->last_name.' -
'.formatNumber($points, 0).' € +
'.formatNumber($points, 0).' '.formatNumber($margin, 1).' %
'.formatNumber($commission, 2).' € '.$item->user_level_name.' @@ -84,10 +84,16 @@ class SalesPointsVolumeHelper self::addTableItemLine($business_user, $deep); } foreach(self::$business_users_line as $deep => $items){ + self::$totalcommission[$deep] = 0; + self::$totalpoints[$deep] = 0; foreach($items as $item){ $ret .= self::setTableHTMLItemLine($item, $deep); } + if($deep > 0){ + $ret .= self::addTableHTMLTotalItemLine($deep, 'line'); + } } + $ret .= self::addTableHTMLTotalItemLine($deep, 'end'); return $ret; } @@ -100,6 +106,39 @@ class SalesPointsVolumeHelper } } } + private static function addTableHTMLTotalItemLine($deep, $type){ + $points = 0; + $commission = 0; + if($type == 'end'){ + $pp = '
'.__('team.PP').'
'; + $style = ' style="background-color:#d7d700;"'; + $text = __('order.total'); + foreach(self::$totalpoints as $key => $value){ + $points += $value; + $commission += self::$totalcommission[$key]; + } + + }else{ + $pp = '
'.$deep.'. '.__('team.PP').'
'; + $style = 'style="background-color:#e5e4e4"'; + $text = __('order.sum'); + $points = self::$totalpoints[$deep]; + $commission = self::$totalcommission[$deep]; + } + + + + $ret = ' +
'.$pp.'
+ '.$text.' +
'.formatNumber($points, 0).' +   +
'.formatNumber($commission, 2).' € +   + '; + + return $ret; + } private static function setTableHTMLItemLine($item, $deep){ @@ -111,6 +150,8 @@ class SalesPointsVolumeHelper $pp = '
'.$deep.'. '.__('team.PP').'
'; $margin = self::$cbot->getKeybyLine($deep, 'margin'); $commission = $points / 100 * $margin; + self::$totalcommission[$deep] += $commission; + self::$totalpoints[$deep] += $points; } // /* @@ -121,11 +162,12 @@ class SalesPointsVolumeHelper {{__('tables.commission')}} € {{ __('tables.level') }} */ + $ret = '
'.$pp.'
'.$item->first_name.' '.$item->last_name.' -
'.formatNumber($points, 0).' € +
'.formatNumber($points, 0).' '.formatNumber($margin, 1).' %
'.formatNumber($commission, 2).' € '.$item->user_level_name.' diff --git a/app/Services/CustomerPriority.php b/app/Services/CustomerPriority.php index be35c2e..ec82c57 100644 --- a/app/Services/CustomerPriority.php +++ b/app/Services/CustomerPriority.php @@ -135,8 +135,8 @@ class CustomerPriority $matches = []; $change = []; $ret = 'update'; + //email geändert - if(isset($data['billing_email']) && $shopping_user->billing_email != $data['billing_email']){ $found = ShoppingUser::where('auth_user_id', '=', NULL) ->where('number', '!=', NULL) //has number @@ -205,8 +205,10 @@ class CustomerPriority $shopping_user->member_id = $member_id; $shopping_user->number = self::nextNumber(); $shopping_user->save(); - $shopping_user->shopping_order->member_id = $member_id; - $shopping_user->shopping_order->save(); + if($shopping_user->shopping_order){ + $shopping_user->shopping_order->member_id = $member_id; + $shopping_user->shopping_order->save(); + } return true; } return false; diff --git a/app/Services/HTMLHelper.php b/app/Services/HTMLHelper.php index fa9d943..524079e 100644 --- a/app/Services/HTMLHelper.php +++ b/app/Services/HTMLHelper.php @@ -104,23 +104,22 @@ class HTMLHelper return $ret; } - public static function getAboIntervallWeeks($default = 1){ - $values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; + public static function getAboDeliveryOptions($default = 5){ + $values = \App\Models\UserAbo::$aboDeliveryDays; $ret = ""; foreach ($values as $value){ $attr = ($value == $default) ? 'selected="selected"' : ''; - $str = self::getAboWeeksLang($value); + $str = self::getAboStrLang($value); $ret .= '\n'; } return $ret; } - public static function getAboWeeksLang($num){ - if($num == 1){ - return __('order.every_week'); - } - return __('order.every_weeks', ['num' => $num]); + public static function getAboStrLang($num){ + return $num.'. '.__('abo.of_month'); } + + public static function getAttributesWithoutParents($id = false, $sameId = false, $all = true){ $values = Attribute::where('parent_id', null)->get(); $ret = ""; @@ -157,14 +156,14 @@ class HTMLHelper if($ids == null){ $ids = array(); } - $values = Product::where('active', 1)->get(); + $values = Product::all(); $ret = ""; if($all){ $ret .= '\n'; } foreach ($values as $value){ $attr = in_array($value->id, $ids) ? 'selected="selected"' : ''; - $ret .= '\n'; + $ret .= '\n'; } return $ret; } diff --git a/app/Services/OrderPaymentService.php b/app/Services/OrderPaymentService.php new file mode 100644 index 0000000..8216005 --- /dev/null +++ b/app/Services/OrderPaymentService.php @@ -0,0 +1,180 @@ +deleteStoredCart($identifier); + \App\Models\ShoppingInstance::where('identifier', $identifier)->delete(); + //delete session + /* if(\Session::has('user_shop_payment') && \Session::get('user_shop_payment') === 6){ + $user_shop_identifier = \Session::get('user_shop_identifier'); + Yard::instance('shopping')->deleteStoredCart($identifier); + \App\Models\ShoppingInstance::where('identifier', $identifier)->delete(); + }*/ + } + + public static function updateInstanceStatus($identifier, $status, $lower = true){ + if(!ShoppingInstance::where('identifier', $identifier)->exists()){ + return false; + } + if($lower){ + ShoppingInstance::where('identifier', $identifier)->where('status', '<', $status) + ->update(['status' => $status]); + }else{ + ShoppingInstance::where('identifier', $identifier) + ->update(['status' => $status]); + } + } + + public static function getInstanceStatus($identifier){ + $shopping_instance = ShoppingInstance::where('identifier', $identifier)->first(); + if(!$shopping_instance){ + return false; + } + return $shopping_instance->getStatus(); + } + + public static function getTypeBadge(ShoppingInstance $shoppingInstance){ + $isFor = $shoppingInstance->shopping_data['is_for'] ?? '-'; + if ($isFor === 'abo-ot-customer' ) { + return ' '.__('abo.abo').''; + } + if ($isFor === 'ot-customer' ) { + return ' '.__('order.order').''; + } + return ""; + } + + public static function getStatusBadge(ShoppingInstance $shoppingInstance){ + $status = $shoppingInstance->getStatus(); + $badgeClasses = [ + 'link_sent' => 'success', + 'link_openly' => 'warning', + 'link_paid' => 'secondary', + 'link_check' => 'warning', + 'link_pending' => 'warning', + 'link_appointed' => 'secondary', + 'link_failed' => 'danger', + 'link_canceled' => 'danger' + ]; + + if (isset($badgeClasses[$status])) { + return sprintf(' %s', + $badgeClasses[$status], + __('payment.' . $status) + ); + } + + return ''; + } + + public static function getStatusAlert($status){ + $badgeClasses = [ + 'link_sent' => 'success', + 'link_openly' => 'success', + 'link_check' => 'warning', + 'link_pending' => 'warning', + 'link_failed' => 'danger', + 'link_canceled' => 'danger', + 'link_appointed' => 'success', + 'link_paid' => 'success', + + ]; + + if (isset($badgeClasses[$status])) { + return sprintf('
%s
', + $badgeClasses[$status], + __('payment.alert_' . $status) + ); + } + + return ''; + } + + public static function getCustomPayment($identifier){ + + $shopping_instance = ShoppingInstance::where('identifier', $identifier)->first(); + if(!$shopping_instance){ + abort(403, __('msg.shopping_instance_not_found')); + } + $shopping_data = $shopping_instance->shopping_data; + $shopping_user = $shopping_data['shopping_user_id'] ? ShoppingUser::find($shopping_data['shopping_user_id']) : null; + if(!$shopping_user){ + abort(403, __('msg.shopping_user_not_found')); + } + $yard_shopping_items = self::getRestoredYardShoppingItems($shopping_instance); + + $data = [ + 'shopping_instance' => $shopping_instance, + 'shopping_user' => $shopping_user, + 'yard_shopping_items' => $yard_shopping_items, + 'identifier' => $identifier, + 'is_abo' => $shopping_instance->shopping_data['is_abo'] ?? false, + 'is_for' => $shopping_instance->shopping_data['is_for'] ?? false, + 'backlink' => false, + ]; + return $data; + } + + public static function getRestoredYardShoppingItems($shopping_instance){ + + Yard::instance('shopping')->destroy(); + Yard::instance('shopping')->restore($shopping_instance->identifier, [], false); + Yard::instance('shopping')->putYardExtra('user_shop_payment', $shopping_instance->payment); + + Yard::instance('shopping')->putYardExtra('shopping_data', $shopping_instance->shopping_data); + $is_for = isset($shopping_instance->shopping_data['is_for']) ? $shopping_instance->shopping_data['is_for'] : 'ot-member'; + Yard::instance('shopping')->setUserPriceInfos($shopping_instance->shopping_data['user_price_infos']); + Yard::instance('shopping')->setShippingCountryWithPrice($shopping_instance->country_id, $is_for); + + + $rows = Yard::instance('shopping')->getContentByOrder(); + $ret = []; + $ret['items'] = []; + $is_currency = Yard::instance('shopping')->isPriceCurrency(); + $tax_free = Yard::instance('shopping')->getUserTaxFree(); + + foreach($rows as $row){ + $product = \App\Models\Product::find($row->id); + $item = new \stdClass(); + $item->image = $row->options->has('image') ? $row->options->image : null; + $item->price_net = (float) Yard::instance('shopping')->rowPriceNet($row, 3, '.', ''); + $item->price_net_total = (float) Yard::instance('shopping')->rowSubtotalNet($row, 2, '.', ''); + $item->price_currency = $is_currency ? "~".Yard::instance('shopping')->getCurrencyByKey('rowPriceNetCurrency', $row, 3)." ".Yard::instance('shopping')->getPriceCurrencyUnit() : null; + $item->price_currency_total = $is_currency ? "~".Yard::instance('shopping')->getCurrencyByKey('rowSubtotalCurrency', $row, 3)." ".Yard::instance('shopping')->getPriceCurrencyUnit() : null; + $item->price = $row->price; + $item->price_total = ($row->qty * $row->price); + $item->qty = $row->qty; + $item->name = $product->name; + $item->contents = $product->contents; + $item->numbers = $product->numbers; + $item->abo_type = AboHelper::getAboShowOn($product); + $item->number = $product->number; + $item->contents = $product->contents; + $ret['items'][] = $item; + } + + $ret['tax_free'] = $tax_free; + $ret['total']['subtotal'] = Yard::instance('shopping')->subtotal(); + $ret['total']['subtotal_currency'] = $is_currency ? "~".Yard::instance('shopping')->getCurrencyByKey('subtotal')." ".Yard::instance('shopping')->getPriceCurrencyUnit() : null; + $ret['total']['shippingCountryName'] = Yard::instance('shopping')->getShippingCountryName(); + $ret['total']['shippingNet'] = Yard::instance('shopping')->shippingNet(); + $ret['total']['shippingNet currency'] = $is_currency ? "~".Yard::instance('shopping')->getCurrencyByKey('shippingNet')." ".Yard::instance('shopping')->getPriceCurrencyUnit() : null; + $ret['total']['subtotalWithShipping'] = Yard::instance('shopping')->subtotalWithShipping(); + $ret['total']['subtotalWithShipping_currency'] = $is_currency ? "~".Yard::instance('shopping')->getCurrencyByKey('subtotalWithShipping')." ".Yard::instance('shopping')->getPriceCurrencyUnit() : null; + $ret['total']['taxWithShipping'] = Yard::instance('shopping')->taxWithShipping(); + $ret['total']['taxWithShipping_currency'] = $is_currency ? "~".Yard::instance('shopping')->getCurrencyByKey('taxWithShipping')." ".Yard::instance('shopping')->getPriceCurrencyUnit() : null; + $ret['total']['totalWithShipping'] = Yard::instance('shopping')->totalWithShipping(); + $ret['total']['totalWithShipping_currency'] = $is_currency ? "~".Yard::instance('shopping')->getCurrencyByKey('totalWithShipping')." ".Yard::instance('shopping')->getPriceCurrencyUnit() : null; + + return $ret; + } + +} \ No newline at end of file diff --git a/app/Services/Payment.php b/app/Services/Payment.php index c0d74ad..4d593ec 100644 --- a/app/Services/Payment.php +++ b/app/Services/Payment.php @@ -6,6 +6,7 @@ use App\User; use App\Models\UserLevel; use App\Mail\MailCheckout; use App\Services\UserUtil; +use App\Services\AboHelper; use App\Models\ProductBuying; use App\Models\ShoppingOrder; use App\Models\UserCreditItem; @@ -91,6 +92,7 @@ class Payment } public static function getShoppingOrderBadge(ShoppingOrder $shopping_order){ + if($shopping_order->mode === 'test'){ return ''.strtoupper($shopping_order->mode).' - '.self::getFormattedTxaction($shopping_order->txaction).''; } @@ -100,6 +102,14 @@ class Payment return ''.self::getFormattedTxaction($shopping_order->txaction).''; } + public static function getPaymentForBadge(ShoppingOrder $shopping_order){ + $abo = ''; + if($shopping_order->is_abo){ + $abo = ' '.__('abo.abo').''; + } + return ''.$shopping_order->getPaymentForType().''.$abo; + } + public static function getShoppingPaymentBadge(ShoppingPayment $shopping_payment){ if($shopping_payment->mode === 'test'){ return ''.strtoupper($shopping_payment->mode).' - '.self::getFormattedTxaction($shopping_payment->txaction).''; @@ -159,10 +169,10 @@ class Payment $paid = Status der Zahlung, Payone = true, MIVITA Rechnung = false damit kann später die rechnung auf bezahlt gesetzt werden. */ - public static function paymentStatusPaidAction(ShoppingOrder $shopping_order, $paid){ + public static function paymentStatusPaidAction(ShoppingOrder $shopping_order, $paid, $shopping_payment = null){ $send_link = false; $shopping_order->setUserHistoryValue(['status' => 8]); - Shop::userOrders(); + ShoppingUserService::snycOrdersByShoppingOrder($shopping_order); $shopping_order->paid = $paid; $shopping_order->save(); @@ -225,6 +235,7 @@ class Payment } } + if($shopping_order->homeparty){ $shopping_order->setUserHistoryValue(['status' => 9]); $shopping_order->homeparty->completed = 1; @@ -235,12 +246,24 @@ class Payment $shopping_order->setUserHistoryValue(['status' => 9]); ShopApiOrderCart::finishOrder($shopping_order->shopping_collect_order); } - - //make Invoice and - $invoice_repo = new InvoiceRepository($shopping_order); - if(!$shopping_order->isInvoice()){ - $invoice_repo->createAndSalesVolume(); + //the Order is Pay, so we can set the Status in the Abo + if($shopping_order->is_abo){ + if($shopping_payment){ + Util::setInstanceStatusByPayment($shopping_payment, 10); //link_paid + $shopping_payment->identifier = null; + $shopping_payment->save(); + } + AboHelper::setAboActive($shopping_order, 2); } + + //make Invoice is not exist and is live + if($shopping_order->mode === 'live'){ + $invoice_repo = new InvoiceRepository($shopping_order); + if(!$shopping_order->isInvoice()){ + $invoice_repo->createAndSalesVolume(); + } + } + return $send_link; } @@ -263,6 +286,7 @@ class Payment if(!$shopping_order->shopping_user->is_like && $shopping_order->shopping_user->member){ $bcc[] = $shopping_order->shopping_user->member->email; } - Mail::to($billing_email)->bcc($bcc)->locale($shopping_order->getLocale())->send(new MailCheckout($data['txaction'], $shopping_order, $shopping_payment, $data['send_link'], $data['mode'])); + $data['payment_error'] = isset($data['payment_error']) ? $data['payment_error'] : false; + Mail::to($billing_email)->bcc($bcc)->locale($shopping_order->getLocale())->send(new MailCheckout($data['txaction'], $shopping_order, $shopping_payment, $data['send_link'], $data['mode'], $data['payment_error'])); } } diff --git a/app/Services/PaymentHelper.php b/app/Services/PaymentHelper.php index f214795..bd6d6ad 100644 --- a/app/Services/PaymentHelper.php +++ b/app/Services/PaymentHelper.php @@ -17,7 +17,7 @@ class PaymentHelper public function setProduct($product){ Yard::instance('shopping')->destroy(); - Yard::instance('shopping')->add($product->id, $product->getLang('name'), 1, $product->price, false, false, ['image' => "", 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points, 'no_commission' => $product->no_commission]); + Yard::instance('shopping')->add($product->id, $product->getLang('name'), 1, $product->price, false, false, ['image' => "", 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points, 'no_commission' => $product->no_commission, 'show_on' => $product->show_on]); } public function initELVPayment($user){ diff --git a/app/Services/Shop.php b/app/Services/Shop.php index dd5668a..041e01c 100644 --- a/app/Services/Shop.php +++ b/app/Services/Shop.php @@ -1,15 +1,17 @@ where('txaction', 'paid')->OrWhere('txaction', 'appointed')->OrWhere('txaction', 'extern')->OrWhere('txaction', 'invoice_open')->OrWhere('txaction', 'invoice_paid'); - })->where('orders', '=', NULL)->get(); - foreach ($shopping_users as $shopping_user) { - if ($shopping_user->number) { - $orders = ShoppingUser::where('number', '=', $shopping_user->number)->max('orders'); - $orders = $orders + 1; - } else { - $orders = ShoppingUser::where('billing_email', '=', $shopping_user->billing_email)->max('orders'); - $orders = $orders + 1; - } - $shopping_user->orders = $orders; - $shopping_user->save(); - } + + public static function newUserOrder($number) + { + ShoppingUserService::snycOrdersByNumber($number); } - public static function newUserOrder($number){ - if($number > 0){ - $shopping_users = ShoppingUser::where('number', '=', $number)->get(); - $orders = 1; - foreach ($shopping_users as $shopping_user) { - if($shopping_user->shopping_order && ($shopping_user->shopping_order->txaction === 'paid' || - $shopping_user->shopping_order->txaction === 'appointed' || - $shopping_user->shopping_order->txaction === 'extern' || - $shopping_user->shopping_order->txaction === 'extern_paid' )){ - $shopping_user->orders = $orders++; - - }else{ - $shopping_user->orders = NULL; - } - $shopping_user->save(); - - } - } - } - - public static function getShippingCountryCountryId($shipping_country_id){ + public static function getShippingCountryCountryId($shipping_country_id) + { $shippingCountry = ShippingCountry::find($shipping_country_id); - if($shippingCountry && $shippingCountry->country){ + if ($shippingCountry && $shippingCountry->country) { return $shippingCountry->country->id; } return 1; //default DE } - public static function getCountryShippingCountryId($country_id){ + public static function getCountryShippingCountryId($country_id) + { $shippingCountry = ShippingCountry::whereCountryId($country_id)->first(); - if($shippingCountry){ + if ($shippingCountry) { return $shippingCountry->id; } return ShippingCountry::all()->first()->id; } - public static function getLangChange(){ + public static function getLangChange() + { $ret = []; $countries = Country::whereActive(true)->whereSwitch(true)->get(); $first_country = null; - foreach($countries as $country){ - $ShippingCountry = ShippingCountry::whereCountryId($country->id)->first(); - if($ShippingCountry && $ShippingCountry->shipping && $ShippingCountry->shipping->active){ - if(!$first_country){ + foreach ($countries as $country) { + $ShippingCountry = ShippingCountry::whereCountryId($country->id)->first(); + if ($ShippingCountry && $ShippingCountry->shipping && $ShippingCountry->shipping->active) { + if (!$first_country) { $first_country = $country; - } - $ret[strtolower($country->code)] = $country; - } + } + $ret[strtolower($country->code)] = $country; + } } Shop::getUserShopLang($first_country); return $ret; } - public static function getUserShopLang($country = null){ - if(\Session::has('user_shop_lang')){ - if($user_shop_lang = \Session::get('user_shop_lang')){ - return $user_shop_lang; + public static function getUserShopLang($country = null) + { + if (\Session::has('user_shop_lang')) { + if ($user_shop_lang = \Session::get('user_shop_lang')) { + return $user_shop_lang; } } - if($country){ + if ($country) { Shop::initUserShopLang($country); return strtolower($country->code); } return false; } - public static function initUserShopLang($country){ + public static function initUserShopLang($country) + { Yard::instance('shopping')->destroy(); \Session::put('user_shop_lang', strtolower($country->code)); //init Yard self::initUserShopYard($country); - } - public static function initUserShopYard($country){ + public static function initUserShopYard($country) + { //Lieferadresse im Drittland? self::$user_tax_free = $country->supply_country ? true : false; $ShippingCountry = ShippingCountry::whereCountryId($country->id)->first(); @@ -123,8 +99,9 @@ class Shop Yard::instance('shopping')->setUserPriceInfos(Shop::getShopYardInfo()); } - - public static function getShopYardInfo(){ + + public static function getShopYardInfo() + { return [ 'user_tax_free' => self::$user_tax_free, 'shipping_free' => self::$shipping_free, @@ -133,107 +110,68 @@ class Shop 'shipping_country_id' => self::$shipping_country->id, ]; } - - public static function getYardShoppingItems(){ - $rows = Yard::instance('shopping')->getContentByOrder(); - $ret = []; - $ret['items'] = []; - $is_currency = Yard::instance('shopping')->isPriceCurrency(); - $tax_free = Yard::instance('shopping')->getUserTaxFree(); - foreach($rows as $row){ - $product = \App\Models\Product::find($row->id); - $item = new \stdClass(); - $item->image = $row->options->has('image') ? $row->options->image : null; - $item->price_net = (float) Yard::instance('shopping')->rowPriceNet($row, 3, '.', ''); - $item->price_net_total = (float) Yard::instance('shopping')->rowSubtotalNet($row, 2, '.', ''); - $item->price_currency = $is_currency ? "~".Yard::instance('shopping')->getCurrencyByKey('rowPriceNetCurrency', $row, 3)." ".Yard::instance('shopping')->getPriceCurrencyUnit() : null; - $item->price_currency_total = $is_currency ? "~".Yard::instance('shopping')->getCurrencyByKey('rowSubtotalCurrency', $row, 3)." ".Yard::instance('shopping')->getPriceCurrencyUnit() : null; - $item->price = $row->price; - $item->price_total = ($row->qty * $row->price); - $item->qty = $row->qty; - $item->name = $product->name; - $item->contents = $product->contents; - $item->numbers = $product->numbers; - $ret['items'][] = $item; - } - - $ret['tax_free'] = $tax_free; - $ret['total']['subtotal'] = Yard::instance('shopping')->subtotal(); - $ret['total']['subtotal_currency'] = $is_currency ? "~".Yard::instance('shopping')->getCurrencyByKey('subtotal')." ".Yard::instance('shopping')->getPriceCurrencyUnit() : null; - $ret['total']['shippingCountryName'] = Yard::instance('shopping')->getShippingCountryName(); - $ret['total']['shippingNet'] = Yard::instance('shopping')->shippingNet(); - $ret['total']['shippingNet currency'] = $is_currency ? "~".Yard::instance('shopping')->getCurrencyByKey('shippingNet')." ".Yard::instance('shopping')->getPriceCurrencyUnit() : null; - $ret['total']['subtotalWithShipping'] = Yard::instance('shopping')->subtotalWithShipping(); - $ret['total']['subtotalWithShipping_currency'] = $is_currency ? "~".Yard::instance('shopping')->getCurrencyByKey('subtotalWithShipping')." ".Yard::instance('shopping')->getPriceCurrencyUnit() : null; - $ret['total']['taxWithShipping'] = Yard::instance('shopping')->taxWithShipping(); - $ret['total']['taxWithShipping_currency'] = $is_currency ? "~".Yard::instance('shopping')->getCurrencyByKey('taxWithShipping')." ".Yard::instance('shopping')->getPriceCurrencyUnit() : null; - $ret['total']['totalWithShipping'] = Yard::instance('shopping')->totalWithShipping(); - $ret['total']['totalWithShipping_currency'] = $is_currency ? "~".Yard::instance('shopping')->getCurrencyByKey('totalWithShipping')." ".Yard::instance('shopping')->getPriceCurrencyUnit() : null; - - - - return $ret; - } - public static function checkShoppingUser($id, $user){ - if($id === null){ + public static function checkShoppingUser($id, $user) + { + if ($id === null) { abort(403, 'Error: Keine User ID'); } $shopping_user = ShoppingUser::findOrFail($id); - if($shopping_user->member_id !== $user->id){ + if ($shopping_user->member_id !== $user->id) { abort(403, 'Error: Falsche User ID'); } $shopping_user = ShoppingUser::findOrFail($id); - if($shopping_user->is_like){ + if ($shopping_user->is_like) { abort(403, 'Error: Kunde in Prüfung'); } return $shopping_user; } - public static function checkShoppingCountry($for, $id=null){ + public static function checkShoppingCountry($for, $id = null) + { $country_id = null; - if($for === 'me' || $for === 'abo-me'){ + if ($for === 'me' || $for === 'abo-me') { $user = User::find(\Auth::user()->id); - if($user->account->same_as_billing){ + if ($user->account->same_as_billing) { $country_id = $user->account->country_id; - }else{ + } else { $country_id = $user->account->shipping_country_id; } } - if(strpos($for, 'ot') !== false && $id){ + if (strpos($for, 'ot') !== false && $id) { $shopping_user = ShoppingUser::findOrFail($id); - if($shopping_user->same_as_billing){ + if ($shopping_user->same_as_billing) { $country_id = $shopping_user->billing_country->id; - }else{ + } else { $country_id = $shopping_user->shipping_country->id; } } - if($country_id){ - if($shipping_country = ShippingCountry::whereCountryId($country_id)->first()){ - if($shipping_country->shipping && $shipping_country->shipping->active){ + if ($country_id) { + if ($shipping_country = ShippingCountry::whereCountryId($country_id)->first()) { + if ($shipping_country->shipping && $shipping_country->shipping->active) { return $shipping_country->id; } - } } return false; } - public static function getDeliveryCountry($for, $id=null){ + public static function getDeliveryCountry($for, $id = null) + { $country_id = null; - if($for === 'me' || $for === 'abo-me'){ + if ($for === 'me' || $for === 'abo-me') { $user = User::find(\Auth::user()->id); - if($user->account->same_as_billing){ - return $user->account->country ? $user->account->country->getLocated() : ''; - }else{ + if ($user->account->same_as_billing) { + return $user->account->country ? $user->account->country->getLocated() : ''; + } else { return $user->account->shipping_country ? $user->account->shipping_country->getLocated() : ''; } } - if(strpos($for, 'ot') !== false && $id){ + if (strpos($for, 'ot') !== false && $id) { $shopping_user = ShoppingUser::findOrFail($id); - if($shopping_user->same_as_billing){ + if ($shopping_user->same_as_billing) { return $shopping_user->billing_country ? $shopping_user->billing_country->getLocated() : ''; - }else{ + } else { return $shopping_user->shipping_country ? $shopping_user->shipping_country->getLocated() : ''; } } @@ -241,16 +179,17 @@ class Shop } - public static function getShippingPriceByShippingCountryId($shipping_country_id, $shipping_weight){ + public static function getShippingPriceByShippingCountryId($shipping_country_id, $shipping_weight) + { $shippingCountry = ShippingCountry::find($shipping_country_id); - if(!$shippingCountry){ + if (!$shippingCountry) { abort(403, 'Fehler: Versandland nicht gefunden'); } - if(!isset($shippingCountry->shipping) && count($shippingCountry->shipping->shipping_prices) === 0){ + if (!isset($shippingCountry->shipping) && count($shippingCountry->shipping->shipping_prices) === 0) { abort(403, 'Fehler: Kein Preise für das Versandland angelegt'); } $shipping_price = $shippingCountry->shipping->shipping_prices->first(); - if(!$shipping_price){ + if (!$shipping_price) { abort(403, 'Fehler: Preis vom Versandland nicht gefunden'); } @@ -258,13 +197,13 @@ class Shop abort(403, 'Fehler: Kein Versandgewicht'); }*/ - if($shipping_weight == 0){ + if ($shipping_weight == 0) { $shipping_price->price = 0; $shipping_price->price_comp = 0; return $shipping_price; } - if($shipping_weight > 0){ + if ($shipping_weight > 0) { /* if($this->shipping_free && $this->total(2, '.', '') >= $this->shipping_free){ if($this->weightByFreeShipping() == 0){ @@ -293,13 +232,13 @@ class Shop //default }*/ - } - public static function shippingPriceByWeight($shipping_prices, $shipping_weight){ - foreach ($shipping_prices as $price){ - if($price->weight_from > 0 && $price->weight_to > 0){ - if($shipping_weight >= $price->weight_from && $shipping_weight <= $price->weight_to){ + public static function shippingPriceByWeight($shipping_prices, $shipping_weight) + { + foreach ($shipping_prices as $price) { + if ($price->weight_from > 0 && $price->weight_to > 0) { + if ($shipping_weight >= $price->weight_from && $shipping_weight <= $price->weight_to) { return $price; } } @@ -307,25 +246,56 @@ class Shop abort(403, 'Fehler: Preis nach Gewicht im Versandland nicht gefunden'); } - public static function isCompProducts($for){ - /* + public static function isCompProducts($for) + { + /* $for = me, ot-member, ot-customer, abo-ot-member, abo-ot-customer, abo-me */ - if($for === 'me'){ + if ($for === 'me') { return (bool) Setting::getContentBySlug('is_comp_me_order'); } - if($for === 'abo-me'){ + if ($for === 'abo-me') { return (bool) Setting::getContentBySlug('is_comp_me_abo'); } return false; } - public static function getIPDatabaseInfo(){ + public static function getCompProducts($for) + { + if (Shop::isCompProducts($for)) { + $show_on = '0'; + switch ($for) { + case 'me': + $show_on = '2'; + break; + case 'abo-me': + $show_on = '12'; + break; + case 'ot-member': + $show_on = '3'; + break; + case 'ot-customer': + $show_on = '3'; + break; + case 'abo-ot-member': + $show_on = '13'; + break; + case 'abo-ot-customer': + $show_on = '13'; + break; + } + return Product::whereActive(true)->where('shipping_addon', true)->whereJsonContains('show_on', $show_on)->orderBy('pos', 'DESC')->get(); + } + return []; + } + + public static function getIPDatabaseInfo() + { //first check the DBs for the IP - /* testing + /* testing foreach(self::testIps() as $ip_address){ $country = MyDBIP::lookup($ip_address); @@ -355,12 +325,12 @@ class Shop dd("done"); */ - /* live */ + /* live */ $ip_address = \Request::ip(); - // $ip_address = '86.189.47.78'; //testing + // $ip_address = '86.189.47.78'; //testing $country = MyDBIP::lookup($ip_address); - if($country !== false){ + if ($country !== false) { return strtolower($country); } //not found search in IPinfo @@ -368,10 +338,10 @@ class Shop $client = new IPinfo($access_token); $details = $client->getDetails($ip_address); - if(isset($details->error) && $details->error !== null){ + if (isset($details->error) && $details->error !== null) { return 'error'; } - if(isset($details->country) && $details->country !== null){ + if (isset($details->country) && $details->country !== null) { MyDBIP::insert($ip_address, $details->country); return strtolower($details->country); } @@ -379,82 +349,83 @@ class Shop } - private static function testIps(){ + private static function testIps() + { return [ - '58.217.40.197' - ,'207.117.144.54' - ,'65.169.228.128' - ,'6.84.3.236' - ,'214.56.36.93' - ,'9.43.145.245' - ,'231.199.26.76' - ,'86.189.47.78' - ,'3.122.58.75' - ,'251.133.143.149' - ,'6.142.181.83' - ,'2.55.191.86' - ,'90.189.58.233' - ,'57.3.139.111' - ,'41.130.99.194' - ,'1.59.123.14' - ,'9.119.131.109' - ,'54.240.231.9' - ,'117.19.131.144' - ,'221.217.39.211' - ,'7.43.125.76' - ,'224.86.233.79' - ,'32.151.38.98' - ,'4.134.40.92' - ,'4.70.188.58' - ,'24.7.152.228' - ,'58.122.179.1' - ,'5.123.9.44' - ,'3.175.206.5' - ,'8.142.119.47' - ,'40.248.58.203' - ,'7.84.254.187' - ,'215.215.239.71' - ,'124.40.66.196' - ,'215.87.143.102' - ,'143.39.97.13' - ,'202.56.79.198' - ,'143.60.125.142' - ,'73.233.153.126' - ,'121.144.28.245' - ,'53.232.193.122' - ,'104.222.102.209' - ,'216.55.215.13' - ,'84.106.145.239' - ,'200.131.52.20' - ,'132.252.158.0' - ,'220.11.129.27' - ,'8.153.0.186' - ,'119.206.117.107' - ,'222.93.42.133' - ,'105.104.224.98' - ,'252.156.181.78' - ,'7.139.235.187' - ,'111.140.127.91' - ,'1.186.17.84' - ,'85.59.39.221' - ,'231.152.252.43' - ,'125.214.216.123' - ,'69.31.65.238' - ,'126.12.105.55' - ,'211.39.4.118' - ,'73.102.88.79' - ,'210.229.38.137' - ,'5.3.230.214' - ,'208.92.91.242' - ,'4.105.177.199' - ,'38.10.48.92' - ,'133.33.44.13' - ,'202.189.24.255' - ,'5.101.244.234' - ,'2.52.110.194' - ,'1.130.73.146' - ,'84.237.232.120' - ,'25.163.83.194' + '58.217.40.197', + '207.117.144.54', + '65.169.228.128', + '6.84.3.236', + '214.56.36.93', + '9.43.145.245', + '231.199.26.76', + '86.189.47.78', + '3.122.58.75', + '251.133.143.149', + '6.142.181.83', + '2.55.191.86', + '90.189.58.233', + '57.3.139.111', + '41.130.99.194', + '1.59.123.14', + '9.119.131.109', + '54.240.231.9', + '117.19.131.144', + '221.217.39.211', + '7.43.125.76', + '224.86.233.79', + '32.151.38.98', + '4.134.40.92', + '4.70.188.58', + '24.7.152.228', + '58.122.179.1', + '5.123.9.44', + '3.175.206.5', + '8.142.119.47', + '40.248.58.203', + '7.84.254.187', + '215.215.239.71', + '124.40.66.196', + '215.87.143.102', + '143.39.97.13', + '202.56.79.198', + '143.60.125.142', + '73.233.153.126', + '121.144.28.245', + '53.232.193.122', + '104.222.102.209', + '216.55.215.13', + '84.106.145.239', + '200.131.52.20', + '132.252.158.0', + '220.11.129.27', + '8.153.0.186', + '119.206.117.107', + '222.93.42.133', + '105.104.224.98', + '252.156.181.78', + '7.139.235.187', + '111.140.127.91', + '1.186.17.84', + '85.59.39.221', + '231.152.252.43', + '125.214.216.123', + '69.31.65.238', + '126.12.105.55', + '211.39.4.118', + '73.102.88.79', + '210.229.38.137', + '5.3.230.214', + '208.92.91.242', + '4.105.177.199', + '38.10.48.92', + '133.33.44.13', + '202.189.24.255', + '5.101.244.234', + '2.52.110.194', + '1.130.73.146', + '84.237.232.120', + '25.163.83.194' ]; } -} \ No newline at end of file +} diff --git a/app/Services/ShoppingUserService.php b/app/Services/ShoppingUserService.php new file mode 100644 index 0000000..4fedb29 --- /dev/null +++ b/app/Services/ShoppingUserService.php @@ -0,0 +1,198 @@ +billing_email)->where('member_id', '=', $shopping_user->member_id)->get(); + return $users->flatMap(function($user) { + return $user->shopping_orders; + })->sortByDesc('created_at'); + } + + public static function syncOrdersByEmail($user) + { + $maxAttempts = 3; + $attempt = 1; + + while ($attempt <= $maxAttempts) { + try { + DB::beginTransaction(); + + $shopping_user = ShoppingUser::where('member_id', $user->id) + ->first(); + + if (!$shopping_user) { + DB::commit(); + return; + } + + $shopping_users = ShoppingUser::where('billing_email', '=', $shopping_user->billing_email) + ->whereHas('shopping_order', function($q) { + $q->where('txaction', 'paid') + ->orWhere('txaction', 'appointed') + ->orWhere('txaction', 'extern') + ->orWhere('txaction', 'invoice_open') + ->orWhere('txaction', 'invoice_paid'); + }) + ->lockForUpdate() + ->get(); + + $order_count = $shopping_users->count(); + + foreach($shopping_users as $user) { + $user->orders = $order_count; + $user->save(); + } + + DB::commit(); + return; // Erfolgreicher Fall + + } catch (QueryException $e) { + DB::rollBack(); + + // Wenn es ein Deadlock ist, versuchen wir es erneut + if ($e->getCode() == 40001 && $attempt < $maxAttempts) { + $sleepTime = pow(2, $attempt) * 100000; // Exponentielles Backoff in Mikrosekunden + usleep($sleepTime); + $attempt++; + continue; + } + + throw $e; // Andere Fehler oder zu viele Versuche + } + } + } + + /*public static function syncOrdersByEmail($user){ + ShoppingUser::where('member_id', $user->id) + ->whereNotNull('billing_email') + ->where('billing_email', '!=', '') + ->select('billing_email') + ->groupBy('billing_email') + ->get() + ->each(function($shopping_user) { + self::snycOrdersByShoppingUser($shopping_user); + }); + }*/ + /** + * Synchronisiert die Bestellungen eines ShoppingOrders mit den Bestellungen des zugehörigen ShoppingUsers + * + * @param ShoppingOrder $shopping_order Der zu synchronisierende ShoppingOrder + */ + public static function snycOrdersByShoppingOrder(ShoppingOrder $shopping_order) { + $shopping_user = $shopping_order->shopping_user ? $shopping_order->shopping_user : null; + if($shopping_user){ + self::snycOrdersByShoppingUser($shopping_user); + } + } + + /** + * Synchronisiert die Bestellungen eines ShoppingUsers mit den Bestellungen des zugehörigen Benutzers + * + * @param ShoppingUser $shopping_user Der zu synchronisierende ShoppingUser + */ + public static function snycOrdersByShoppingUser(ShoppingUser $shopping_user) { + + // Aktualisiere alle Benutzer mit einer einzigen Datenbankabfrage + ShoppingUser::where('billing_email', $shopping_user->billing_email) + ->update([ + 'orders' => ShoppingUser::where('billing_email', $shopping_user->billing_email) + ->whereHas('shopping_order', function($q) { + $q->whereIn('txaction', ['paid', 'appointed', 'extern', 'invoice_open', 'invoice_paid']); + }) + ->count() + ]); + + } + + public static function snycOrdersByNumber($number){ + if($number <= 0) { + return; + } + // Aktualisiere alle Benutzer mit einer einzigen Datenbankabfrage + + ShoppingUser::where('number', '=', $number) + ->update([ + 'orders' => ShoppingUser::where('number', '=', $number) + ->whereHas('shopping_order', function($q) { + $q->whereIn('txaction', ['paid', 'appointed', 'extern', 'invoice_open', 'invoice_paid']); + }) + ->count() + ]); + // Setze orders auf NULL für alle anderen + ShoppingUser::where('number', '=', $number) + ->whereDoesntHave('shopping_order', function($q) { + $q->whereIn('txaction', ['paid', 'appointed', 'extern', 'extern_paid']); + }) + ->update(['orders' => null]); + } + + /** + * Synchronisiert die Nummern aller ShoppingUser eines Benutzers anhand der E-Mails + * + * @param User $user Der Benutzer, dessen ShoppingUser synchronisiert werden sollen + */ + public static function syncNumbersByEmail($user) { + // Hole alle ShoppingUser mit E-Mail gruppiert + $emailGroups = ShoppingUser::where('member_id', $user->id) + ->whereNotNull('billing_email') + ->where('billing_email', '!=', '') + ->get() + ->groupBy('billing_email'); + + foreach($emailGroups as $email => $users) { + // Suche ob es bereits eine Nummer für diese E-Mail gibt + $existingNumber = ($users->whereNotNull('number')->first()) ? $users->whereNotNull('number')->first()->number : null; + + if($existingNumber) { + // Wenn eine Nummer existiert, nutze diese für alle User mit der E-Mail + ShoppingUser::where('member_id', $user->id) + ->where('billing_email', $email) + ->whereNull('number') + ->update(['number' => $existingNumber]); + } else { + // Wenn keine Nummer existiert, generiere eine neue + $maxNumber = ShoppingUser::max('number') ?: 1000; + $newNumber = $maxNumber + 1; + + ShoppingUser::where('member_id', $user->id) + ->where('billing_email', $email) + ->update(['number' => $newNumber]); + } + } + } + + /** + * Setzt alle Faker-E-Mails für einen Benutzer auf 1 + * + * @param User $user Der Benutzer, dessen Faker-E-Mails gesetzt werden sollen + */ + public static function setFakerMail($user){ + // Aktualisiere alle Faker-E-Mails für den Benutzer in einem einzigen Update + // Schneller da nur ein einzelner SQL Query ausgeführt wird + ShoppingUser::where('member_id', $user->id) + ->where('faker_mail', '!=', 1) + ->where('billing_email', 'LIKE', '%faker@mivita.care') + ->update(['faker_mail' => 1]); + + // Setze alle anderen auf NULL zurück + ShoppingUser::where('member_id', $user->id) + ->where('billing_email', 'NOT LIKE', '%faker@mivita.care') + ->update(['faker_mail' => null]); + } +} \ No newline at end of file diff --git a/app/Services/Slim.php b/app/Services/Slim.php index 79b0faf..10b281b 100644 --- a/app/Services/Slim.php +++ b/app/Services/Slim.php @@ -43,9 +43,7 @@ class Slim { if (empty($value)) {return null;} // If magic quotes enabled - if (get_magic_quotes_gpc()) { - $value = stripslashes($value); - } + // Magic quotes were removed in PHP 5.4, no need to check in PHP 8.2 // The data is posted as a JSON String so to be used it needs to be deserialized first $data = json_decode($value); diff --git a/app/Services/SyS/ShoppingOrders.php b/app/Services/SyS/ShoppingOrders.php index cd67847..dd1ee65 100644 --- a/app/Services/SyS/ShoppingOrders.php +++ b/app/Services/SyS/ShoppingOrders.php @@ -5,6 +5,7 @@ use Request; use App\Services\Shop; use App\Models\UserShop; use App\Models\ShoppingUser; +use App\Services\ShoppingUserService; use App\Http\Controllers\Api\KasController; use App\Http\Controllers\Api\KasSLLController; @@ -55,7 +56,7 @@ class ShoppingOrders } if($data['action'] === 'next_run'){ - Shop::userOrders(); + ShoppingUserService::snycOrdersByShoppingUser($shopping_user); \Session()->flash('alert-save', true); } return back(); diff --git a/app/Services/Util.php b/app/Services/Util.php index a4f4084..563b880 100644 --- a/app/Services/Util.php +++ b/app/Services/Util.php @@ -85,7 +85,15 @@ class Util return number_format($value, $dec, self::_decimal_separator(), self::_thousands_separator()); } - + public static function cleanIntegerFromString($value) { + // Entferne alle nicht-numerischen Zeichen außer Minus + $cleanStr = preg_replace("/[^0-9-]/", "", $value); + + // Konvertiere zu Integer und entferne führende Nullen + $number = (int)$cleanStr; + + return $number; + } public static function cleanNumberFormat($num = 0, $dec = 2, $fullzero = false){ if($fullzero && $num == 0){ @@ -140,6 +148,35 @@ class Util } return false; } + + public static function getInstanceStatus(){ + $identifier = self::getUserShopIdentifier(); + if($identifier && \Session::has('user_shop_payment') && \Session::get('user_shop_payment') === 6){ + return OrderPaymentService::getInstanceStatus($identifier); + } + return false; + } + + public static function setInstanceStatus($status, $lower = true){ + $identifier = self::getUserShopIdentifier(); + if($identifier && \Session::has('user_shop_payment') && \Session::get('user_shop_payment') === 6){ + OrderPaymentService::updateInstanceStatus($identifier, $status, $lower); + } + } + + public static function setInstanceStatusByPayment($shopping_payment, $status, $lower = true){ + if($shopping_payment->identifier){ + OrderPaymentService::updateInstanceStatus($shopping_payment->identifier, $status, $lower); + } + } + + public static function getShoppingInstance(){ + if(\Session::has('shopping_instance')){ + return \Session::get('shopping_instance'); + } + return false; + } + public static function getUserHistory(){ $auth_user = self::getAuthUser(); $user_shop_identifier = self::getUserShopIdentifier(); @@ -171,7 +208,7 @@ class Util return 'test'; } } - return 'live'; + return config('app.mode'); } public static function addRoute($p = []){ $b = []; diff --git a/app/User.php b/app/User.php index b9bac03..f48ecb7 100755 --- a/app/User.php +++ b/app/User.php @@ -136,12 +136,15 @@ class User extends Authenticatable */ protected $fillable = [ - 'email', 'password', 'token', + 'email', + 'password', + 'token', ]; protected $casts = [ 'settings' => 'array', - 'payment_methods' => 'array' + 'payment_methods' => 'array', + ]; /** @@ -150,41 +153,51 @@ class User extends Authenticatable * @var array */ protected $hidden = [ - 'password', 'remember_token', 'token', + 'password', + 'remember_token', + 'token', ]; private $userSalesVolume = false; - public function account(){ + public function account() + { return $this->belongsTo('App\Models\UserAccount', 'account_id'); } - public function user_level(){ + public function user_level() + { return $this->belongsTo('App\Models\UserLevel', 'm_level'); } - public function user_sponsor(){ + public function user_sponsor() + { return $this->belongsTo('App\User', 'm_sponsor'); } - public function user_pre_sponsor(){ + public function user_pre_sponsor() + { return $this->belongsTo('App\User', 'pre_sponsor'); } - public function payment_order_product(){ + public function payment_order_product() + { return $this->belongsTo('App\Models\Product', 'payment_order_id'); } - public function files(){ + public function files() + { return $this->hasMany('App\Models\File', 'user_id', ''); } - public function shopping_orders(){ + public function shopping_orders() + { return $this->hasMany('App\Models\ShoppingOrder', 'auth_user_id', ''); } - public function user_histories(){ + public function user_histories() + { return $this->hasMany('App\Models\UserHistory', 'user_id', ''); } @@ -208,33 +221,35 @@ class User extends Authenticatable return $this->hasMany('App\Models\ShoppingUser', 'member_id', 'id'); } - public function getLocale(){ + public function getLocale() + { return $this->lang ? $this->lang : \App::getLocale(); } - - public function getMUserSponsor(){ - if($this->user_sponsor && $this->user_sponsor->account){ - return $this->user_sponsor->account->first_name." ".$this->user_sponsor->account->last_name." | ".$this->user_sponsor->email; + public function getMUserSponsor() + { + if ($this->user_sponsor && $this->user_sponsor->account) { + return $this->user_sponsor->account->first_name . " " . $this->user_sponsor->account->last_name . " | " . $this->user_sponsor->email; } } - public function getFullName($email=true){ + public function getFullName($email = true) + { $ret = ""; - if($this->account){ - $ret = $this->account->first_name." ".$this->account->last_name; - + if ($this->account) { + $ret = $this->account->first_name . " " . $this->account->last_name; } - if($email && $this->id > 1){ - $ret .= " | ".$this->email; + if ($email && $this->id > 1) { + $ret .= " | " . $this->email; } return $ret; } /** * @return bool */ - public function isPasswort(){ - if($this->password == env('APP_KEY')){ + public function isPasswort() + { + if ($this->password == env('APP_KEY')) { return false; } return true; @@ -246,7 +261,7 @@ class User extends Authenticatable */ public function isVIP() { - if($this->admin >= 1){ + if ($this->admin >= 1) { return true; } return false; @@ -258,7 +273,7 @@ class User extends Authenticatable */ public function isAdmin() { - if($this->admin >= 2){ + if ($this->admin >= 2) { return true; } return false; @@ -269,7 +284,7 @@ class User extends Authenticatable */ public function isSuperAdmin() { - if($this->admin >= 3){ + if ($this->admin >= 3) { return true; } return false; @@ -280,7 +295,7 @@ class User extends Authenticatable */ public function isSySAdmin() { - if($this->admin >= 4){ + if ($this->admin >= 4) { return true; } return false; @@ -289,7 +304,7 @@ class User extends Authenticatable public function isUserHasApi() { - if($this->id === 3){ + if ($this->id === 3) { return true; } return false; @@ -300,7 +315,7 @@ class User extends Authenticatable */ public function isApiUser() { - if($this->admin >= 5){ + if ($this->admin >= 5) { return true; } return false; @@ -320,68 +335,81 @@ class User extends Authenticatable */ public function showSideNav() { - if($this->active == 1 && $this->blocked == 0 && $this->wizard >= 10){ + if ($this->active == 1 && $this->blocked == 0 && $this->wizard >= 10) { return true; } return false; } - public function isAboOption(){ - return false; + public function isAboOption() + { + return false; // Abo Option deaktiviert ($this->abo_options && $this->account && $this->account->payment_data) ? true : false; } - public function isActive(){ + public function isActive() + { return ($this->active == 1 && $this->blocked == 0) ? true : false; } - public function isActiveAccount(){ + public function isActiveAccount() + { return $this->payment_account ? Carbon::parse($this->payment_account)->gt(Carbon::now()) : false; } - public function isActiveShop(){ + public function isActiveShop() + { return $this->payment_shop ? Carbon::parse($this->payment_shop)->gt(Carbon::now()) : false; } - public function isRenewalAccount(){ + public function isRenewalAccount() + { if ($this->payment_account) { - return Carbon::parse($this->payment_account)->modify('-'.(config('mivita.renewal_days')+1).' days')->lt(Carbon::now()); + return Carbon::parse($this->payment_account)->modify('-' . (config('mivita.renewal_days') + 1) . ' days')->lt(Carbon::now()); } return false; } - public function nextRenewalAccount(){ - return $this->payment_account ? Carbon::parse($this->payment_account)->modify('-'.config('mivita.renewal_days').' days')->format(\Util::formatDateTimeDB()) : false ; + public function nextRenewalAccount() + { + return $this->payment_account ? Carbon::parse($this->payment_account)->modify('-' . config('mivita.renewal_days') . ' days')->format(\Util::formatDateTimeDB()) : false; } - public function daysActiveAccount(){ + public function daysActiveAccount() + { return Carbon::now()->diffInDays(Carbon::parse($this->payment_account), false); } - public function modifyActiveAccount($add = "1 year"){ + public function modifyActiveAccount($add = "1 year") + { return Carbon::parse($this->payment_account)->modify($add)->format(\Util::formatDateTimeDB()); } - public function daysHumansActiveAccount(){ + public function daysHumansActiveAccount() + { return Carbon::now()->diffForHumans(Carbon::parse($this->payment_account)); } - public function daysActiveShop(){ + public function daysActiveShop() + { return Carbon::now()->diffInDays(Carbon::parse($this->payment_shop), false); } - public function modifyActiveShop($add = "1 year"){ + public function modifyActiveShop($add = "1 year") + { return Carbon::parse($this->payment_shop)->modify($add)->format(\Util::formatDateTimeDB()); } - public function daysHumansActiveShop(){ + public function daysHumansActiveShop() + { return Carbon::now()->diffForHumans(Carbon::parse($this->payment_shop)); } - public function isAcountAboPayDate(){ - if($this->isAboOption()){ - $pay_days = Carbon::parse($this->payment_account)->modify('- '.config('mivita.abo_booking_days').' days'); + public function isAcountAboPayDate() + { + if ($this->isAboOption()) { + $pay_days = Carbon::parse($this->payment_account)->modify('- ' . config('mivita.abo_booking_days') . ' days'); $diff_days = Carbon::now()->diffInDays($pay_days, false); - if($diff_days <= 0){ + if ($diff_days <= 0) { return true; } } @@ -391,54 +419,76 @@ class User extends Authenticatable /** * @return string */ - public function getConfirmationDateFormat(){ - if(!$this->attributes['confirmation_date']){ return ""; } + public function getConfirmationDateFormat() + { + if (!$this->attributes['confirmation_date']) { + return ""; + } return Carbon::parse($this->attributes['confirmation_date'])->format(\Util::formatDateTimeDB()); } /** * @return string */ - public function getActiveDateFormat(){ - if(!$this->attributes['active_date']){ return ""; } + public function getActiveDateFormat($time = true) + { + if (!$this->attributes['active_date']) { + return ""; + } + if (!$time) { + return Carbon::parse($this->attributes['active_date'])->format(\Util::formatDateDB()); + } return Carbon::parse($this->attributes['active_date'])->format(\Util::formatDateTimeDB()); } /** * @return string */ - public function getAgreementFormat(){ - if(!$this->attributes['agreement']){ return ""; } + public function getAgreementFormat() + { + if (!$this->attributes['agreement']) { + return ""; + } return Carbon::parse($this->attributes['agreement'])->format(\Util::formatDateTimeDB()); } - public function getPaymentAccountDateFormat($time = true){ - if(!$this->attributes['payment_account']){ return ""; } - if(!$time){ + public function getPaymentAccountDateFormat($time = true) + { + if (!$this->attributes['payment_account']) { + return ""; + } + if (!$time) { return Carbon::parse($this->attributes['payment_account'])->format(\Util::formatDateDB()); } return Carbon::parse($this->attributes['payment_account'])->format(\Util::formatDateTimeDB()); } - public function getPaymentShopDateFormat($time = true){ - if(!$this->attributes['payment_shop']){ return ""; } - if(!$time){ + public function getPaymentShopDateFormat($time = true) + { + if (!$this->attributes['payment_shop']) { + return ""; + } + if (!$time) { return Carbon::parse($this->attributes['payment_shop'])->format(\Util::formatDateDB()); } return Carbon::parse($this->attributes['payment_shop'])->format(\Util::formatDateTimeDB()); } - public function getReleaseAccountFormat($time = true){ - if(!$this->attributes['release_account']){ return ""; } - if(!$time){ + public function getReleaseAccountFormat($time = true) + { + if (!$this->attributes['release_account']) { + return ""; + } + if (!$time) { return Carbon::parse($this->attributes['release_account'])->format(\Util::formatDateDB()); } return Carbon::parse($this->attributes['release_account'])->format(\Util::formatDateTimeDB()); } - public function setSetting(array $revisions, bool $save = true){ - if(!$this->settings){ + public function setSetting(array $revisions, bool $save = true) + { + if (!$this->settings) { $this->settings = []; } $this->settings = array_merge($this->settings, $revisions); @@ -448,16 +498,18 @@ class User extends Authenticatable return $this; } - public function getSetting($key, $default = null){ + public function getSetting($key, $default = null) + { return isset($this->settings[$key]) ? $this->settings[$key] : $default; } - public function getPaymentMethodsShort(){ + public function getPaymentMethodsShort() + { $ret = ""; - if($this->payment_methods !== null){ - foreach ($this->payment_methods as $payment_method){ - if($find = PaymentMethod::find($payment_method)){ - $ret .= $find->short." | "; + if ($this->payment_methods !== null) { + foreach ($this->payment_methods as $payment_method) { + if ($find = PaymentMethod::find($payment_method)) { + $ret .= $find->short . " | "; } } $ret = rtrim($ret, " | "); @@ -467,19 +519,20 @@ class User extends Authenticatable /** * @return string */ - public function getLandByCountry(){ - if($this->account && $this->account->country_id){ + public function getLandByCountry() + { + if ($this->account && $this->account->country_id) { $code = $this->account->country->code; - if($code == "FR"){ + if ($code == "FR") { return 'fr'; } - if($code == "CH"){ + if ($code == "CH") { return 'de'; } - if($code == "NL"){ + if ($code == "NL") { return 'nl'; } - if($code == "DE"){ + if ($code == "DE") { return 'de'; } } @@ -504,10 +557,10 @@ class User extends Authenticatable { //NOTE check ist, cant change month year ! - if($this->userSalesVolume === false){ + if ($this->userSalesVolume === false) { $this->userSalesVolume = $this->getUserSalesVolume($month, $year, 'first'); } - if($this->userSalesVolume){ + if ($this->userSalesVolume) { switch ($key) { case 'sales_volume_KP_points': return $this->userSalesVolume->month_KP_points; @@ -529,7 +582,7 @@ class User extends Authenticatable case 'sales_volume_total': return $this->userSalesVolume->month_total_net; break; - + case 'sales_volume_total_shop': return $this->userSalesVolume->month_shop_total_net; break; @@ -540,7 +593,7 @@ class User extends Authenticatable } } return 0; - } + } public function getUserSalesVolume($month, $year, $record = 'get') { diff --git a/app/helpers.php b/app/helpers.php index 1248787..04f49d7 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -1,5 +1,7 @@ array ( + 'aliases' => + array ( + 'PDF' => 'Barryvdh\\DomPDF\\Facade\\Pdf', + 'Pdf' => 'Barryvdh\\DomPDF\\Facade\\Pdf', + ), 'providers' => array ( 0 => 'Barryvdh\\DomPDF\\ServiceProvider', ), - 'aliases' => - array ( - 'Pdf' => 'Barryvdh\\DomPDF\\Facade\\Pdf', - 'PDF' => 'Barryvdh\\DomPDF\\Facade\\Pdf', - ), ), 'barryvdh/laravel-ide-helper' => array ( @@ -70,14 +70,14 @@ ), 'intervention/image' => array ( - 'providers' => - array ( - 0 => 'Intervention\\Image\\ImageServiceProvider', - ), 'aliases' => array ( 'Image' => 'Intervention\\Image\\Facades\\Image', ), + 'providers' => + array ( + 0 => 'Intervention\\Image\\ImageServiceProvider', + ), ), 'jenssegers/date' => array ( @@ -100,13 +100,20 @@ ), 'laracasts/flash' => array ( + 'aliases' => + array ( + 'Flash' => 'Laracasts\\Flash\\Flash', + ), 'providers' => array ( 0 => 'Laracasts\\Flash\\FlashServiceProvider', ), - 'aliases' => + ), + 'laravel/legacy-factories' => + array ( + 'providers' => array ( - 'Flash' => 'Laracasts\\Flash\\Flash', + 0 => 'Illuminate\\Database\\Eloquent\\LegacyFactoryServiceProvider', ), ), 'laravel/passport' => @@ -151,14 +158,14 @@ ), 'maatwebsite/excel' => array ( - 'providers' => - array ( - 0 => 'Maatwebsite\\Excel\\ExcelServiceProvider', - ), 'aliases' => array ( 'Excel' => 'Maatwebsite\\Excel\\Facades\\Excel', ), + 'providers' => + array ( + 0 => 'Maatwebsite\\Excel\\ExcelServiceProvider', + ), ), 'nesbot/carbon' => array ( diff --git a/bootstrap/cache/services.php b/bootstrap/cache/services.php index 2a982b8..abb1664 100755 --- a/bootstrap/cache/services.php +++ b/bootstrap/cache/services.php @@ -36,29 +36,30 @@ 32 => 'JoeDixon\\Translation\\TranslationServiceProvider', 33 => 'JoeDixon\\Translation\\TranslationBindingsServiceProvider', 34 => 'Laracasts\\Flash\\FlashServiceProvider', - 35 => 'Laravel\\Passport\\PassportServiceProvider', - 36 => 'Laravel\\Sail\\SailServiceProvider', - 37 => 'Laravel\\Tinker\\TinkerServiceProvider', - 38 => 'Laravel\\Ui\\UiServiceProvider', - 39 => 'Collective\\Html\\HtmlServiceProvider', - 40 => 'Maatwebsite\\Excel\\ExcelServiceProvider', - 41 => 'Carbon\\Laravel\\ServiceProvider', - 42 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider', - 43 => 'Reliese\\Coders\\CodersServiceProvider', - 44 => 'Yajra\\DataTables\\DataTablesServiceProvider', - 45 => 'Reliese\\Coders\\CodersServiceProvider', - 46 => 'Laravel\\Tinker\\TinkerServiceProvider', - 47 => 'App\\Providers\\AppServiceProvider', - 48 => 'App\\Providers\\AuthServiceProvider', - 49 => 'App\\Providers\\EventServiceProvider', - 50 => 'App\\Providers\\RouteServiceProvider', - 51 => 'Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider', - 52 => 'Jenssegers\\Date\\DateServiceProvider', - 53 => 'Collective\\Html\\HtmlServiceProvider', - 54 => 'Intervention\\Image\\ImageServiceProvider', - 55 => 'Maatwebsite\\Excel\\ExcelServiceProvider', - 56 => 'Yajra\\DataTables\\DataTablesServiceProvider', - 57 => 'App\\Providers\\YardServiceProvider', + 35 => 'Illuminate\\Database\\Eloquent\\LegacyFactoryServiceProvider', + 36 => 'Laravel\\Passport\\PassportServiceProvider', + 37 => 'Laravel\\Sail\\SailServiceProvider', + 38 => 'Laravel\\Tinker\\TinkerServiceProvider', + 39 => 'Laravel\\Ui\\UiServiceProvider', + 40 => 'Collective\\Html\\HtmlServiceProvider', + 41 => 'Maatwebsite\\Excel\\ExcelServiceProvider', + 42 => 'Carbon\\Laravel\\ServiceProvider', + 43 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider', + 44 => 'Reliese\\Coders\\CodersServiceProvider', + 45 => 'Yajra\\DataTables\\DataTablesServiceProvider', + 46 => 'Reliese\\Coders\\CodersServiceProvider', + 47 => 'Intervention\\Image\\ImageServiceProvider', + 48 => 'Laravel\\Tinker\\TinkerServiceProvider', + 49 => 'App\\Providers\\AppServiceProvider', + 50 => 'App\\Providers\\AuthServiceProvider', + 51 => 'App\\Providers\\EventServiceProvider', + 52 => 'App\\Providers\\RouteServiceProvider', + 53 => 'Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider', + 54 => 'Jenssegers\\Date\\DateServiceProvider', + 55 => 'Collective\\Html\\HtmlServiceProvider', + 56 => 'Maatwebsite\\Excel\\ExcelServiceProvider', + 57 => 'Yajra\\DataTables\\DataTablesServiceProvider', + 58 => 'App\\Providers\\YardServiceProvider', ), 'eager' => array ( @@ -83,23 +84,24 @@ 18 => 'Jenssegers\\Date\\DateServiceProvider', 19 => 'JoeDixon\\Translation\\TranslationServiceProvider', 20 => 'Laracasts\\Flash\\FlashServiceProvider', - 21 => 'Laravel\\Passport\\PassportServiceProvider', - 22 => 'Laravel\\Ui\\UiServiceProvider', - 23 => 'Maatwebsite\\Excel\\ExcelServiceProvider', - 24 => 'Carbon\\Laravel\\ServiceProvider', - 25 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider', - 26 => 'Reliese\\Coders\\CodersServiceProvider', - 27 => 'Yajra\\DataTables\\DataTablesServiceProvider', - 28 => 'Reliese\\Coders\\CodersServiceProvider', - 29 => 'App\\Providers\\AppServiceProvider', - 30 => 'App\\Providers\\AuthServiceProvider', - 31 => 'App\\Providers\\EventServiceProvider', - 32 => 'App\\Providers\\RouteServiceProvider', - 33 => 'Jenssegers\\Date\\DateServiceProvider', - 34 => 'Intervention\\Image\\ImageServiceProvider', - 35 => 'Maatwebsite\\Excel\\ExcelServiceProvider', - 36 => 'Yajra\\DataTables\\DataTablesServiceProvider', - 37 => 'App\\Providers\\YardServiceProvider', + 21 => 'Illuminate\\Database\\Eloquent\\LegacyFactoryServiceProvider', + 22 => 'Laravel\\Passport\\PassportServiceProvider', + 23 => 'Laravel\\Ui\\UiServiceProvider', + 24 => 'Maatwebsite\\Excel\\ExcelServiceProvider', + 25 => 'Carbon\\Laravel\\ServiceProvider', + 26 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider', + 27 => 'Reliese\\Coders\\CodersServiceProvider', + 28 => 'Yajra\\DataTables\\DataTablesServiceProvider', + 29 => 'Reliese\\Coders\\CodersServiceProvider', + 30 => 'Intervention\\Image\\ImageServiceProvider', + 31 => 'App\\Providers\\AppServiceProvider', + 32 => 'App\\Providers\\AuthServiceProvider', + 33 => 'App\\Providers\\EventServiceProvider', + 34 => 'App\\Providers\\RouteServiceProvider', + 35 => 'Jenssegers\\Date\\DateServiceProvider', + 36 => 'Maatwebsite\\Excel\\ExcelServiceProvider', + 37 => 'Yajra\\DataTables\\DataTablesServiceProvider', + 38 => 'App\\Providers\\YardServiceProvider', ), 'deferred' => array ( diff --git a/composer.json b/composer.json index 759e3ba..2ff425a 100755 --- a/composer.json +++ b/composer.json @@ -6,17 +6,17 @@ "type": "project", "require": { "php": "^7.4|^8.0", - "cocur/slugify": "4.4.0", "askedio/laravel5-profanity-filter": "*", "barryvdh/laravel-dompdf": "*", + "cocur/slugify": "4.4.0", "cviebrock/eloquent-sluggable": "*", "doctrine/dbal": "*", "fideloper/proxy": "^4.4", "fruitcake/laravel-cors": "^2.0", "guzzlehttp/guzzle": "^7.0.1", - "intervention/image": "*", + "intervention/image": "^2.7", "jenssegers/date": "*", - "joedixon/laravel-translation": "^1.1", + "joedixon/laravel-translation": "^2.2", "laracasts/flash": "*", "laravel/framework": "^8.12", "laravel/helpers": "*", diff --git a/composer.lock b/composer.lock index c690594..895156e 100755 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "ad50933786d7ea4e9c73f2aed681e366", + "content-hash": "210e30f91e8a31b7e86100c180ec0e49", "packages": [ { "name": "askedio/laravel5-profanity-filter", @@ -58,31 +58,31 @@ }, { "name": "asm89/stack-cors", - "version": "v2.1.1", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/asm89/stack-cors.git", - "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a" + "reference": "50f57105bad3d97a43ec4a485eb57daf347eafea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/asm89/stack-cors/zipball/73e5b88775c64ccc0b84fb60836b30dc9d92ac4a", - "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a", + "url": "https://api.github.com/repos/asm89/stack-cors/zipball/50f57105bad3d97a43ec4a485eb57daf347eafea", + "reference": "50f57105bad3d97a43ec4a485eb57daf347eafea", "shasum": "" }, "require": { - "php": "^7.2|^8.0", - "symfony/http-foundation": "^4|^5|^6", - "symfony/http-kernel": "^4|^5|^6" + "php": "^7.3|^8.0", + "symfony/http-foundation": "^5.3|^6|^7", + "symfony/http-kernel": "^5.3|^6|^7" }, "require-dev": { - "phpunit/phpunit": "^7|^9", + "phpunit/phpunit": "^9", "squizlabs/php_codesniffer": "^3.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.2-dev" } }, "autoload": { @@ -108,48 +108,48 @@ ], "support": { "issues": "https://github.com/asm89/stack-cors/issues", - "source": "https://github.com/asm89/stack-cors/tree/v2.1.1" + "source": "https://github.com/asm89/stack-cors/tree/v2.2.0" }, - "time": "2022-01-18T09:12:03+00:00" + "time": "2023-11-14T13:51:46+00:00" }, { "name": "barryvdh/laravel-dompdf", - "version": "v2.0.1", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-dompdf.git", - "reference": "9843d2be423670fb434f4c978b3c0f4dd92c87a6" + "reference": "c96f90c97666cebec154ca1ffb67afed372114d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/9843d2be423670fb434f4c978b3c0f4dd92c87a6", - "reference": "9843d2be423670fb434f4c978b3c0f4dd92c87a6", + "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/c96f90c97666cebec154ca1ffb67afed372114d8", + "reference": "c96f90c97666cebec154ca1ffb67afed372114d8", "shasum": "" }, "require": { - "dompdf/dompdf": "^2.0.1", - "illuminate/support": "^6|^7|^8|^9|^10", + "dompdf/dompdf": "^2.0.7", + "illuminate/support": "^6|^7|^8|^9|^10|^11", "php": "^7.2 || ^8.0" }, "require-dev": { - "nunomaduro/larastan": "^1|^2", - "orchestra/testbench": "^4|^5|^6|^7|^8", - "phpro/grumphp": "^1", + "larastan/larastan": "^1.0|^2.7.0", + "orchestra/testbench": "^4|^5|^6|^7|^8|^9", + "phpro/grumphp": "^1 || ^2.5", "squizlabs/php_codesniffer": "^3.5" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - }, "laravel": { + "aliases": { + "PDF": "Barryvdh\\DomPDF\\Facade\\Pdf", + "Pdf": "Barryvdh\\DomPDF\\Facade\\Pdf" + }, "providers": [ "Barryvdh\\DomPDF\\ServiceProvider" - ], - "aliases": { - "Pdf": "Barryvdh\\DomPDF\\Facade\\Pdf", - "PDF": "Barryvdh\\DomPDF\\Facade\\Pdf" - } + ] + }, + "branch-alias": { + "dev-master": "2.0-dev" } }, "autoload": { @@ -175,7 +175,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-dompdf/issues", - "source": "https://github.com/barryvdh/laravel-dompdf/tree/v2.0.1" + "source": "https://github.com/barryvdh/laravel-dompdf/tree/v2.2.0" }, "funding": [ { @@ -187,30 +187,29 @@ "type": "github" } ], - "time": "2023-01-12T15:12:49+00:00" + "time": "2024-04-25T13:16:04+00:00" }, { "name": "brick/math", - "version": "0.9.3", + "version": "0.12.1", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" + "reference": "f510c0a40911935b77b86859eb5223d58d660df1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", + "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", + "reference": "f510c0a40911935b77b86859eb5223d58d660df1", "shasum": "" }, "require": { - "ext-json": "*", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", - "vimeo/psalm": "4.9.2" + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "5.16.0" }, "type": "library", "autoload": { @@ -230,24 +229,94 @@ "arithmetic", "bigdecimal", "bignum", + "bignumber", "brick", - "math" + "decimal", + "integer", + "math", + "mathematics", + "rational" ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.9.3" + "source": "https://github.com/brick/math/tree/0.12.1" }, "funding": [ { "url": "https://github.com/BenMorel", "type": "github" + } + ], + "time": "2023-11-29T23:19:16+00:00" + }, + { + "name": "carbonphp/carbon-doctrine-types", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", + "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "doctrine/dbal": "<3.7.0 || >=4.0.0" + }, + "require-dev": { + "doctrine/dbal": "^3.7.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/2.1.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/brick/math", + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", "type": "tidelift" } ], - "time": "2021-08-15T20:50:18+00:00" + "time": "2023-12-11T17:09:12+00:00" }, { "name": "cocur/slugify", @@ -324,25 +393,104 @@ "time": "2023-08-05T09:42:11+00:00" }, { - "name": "composer/semver", - "version": "3.4.0", + "name": "composer/pcre", + "version": "3.3.2", "source": { "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "url": "https://github.com/composer/pcre.git", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-11-12T16:29:46+00:00" + }, + { + "name": "composer/semver", + "version": "3.4.3", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -386,7 +534,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -402,7 +550,7 @@ "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "cviebrock/eloquent-sluggable", @@ -544,6 +692,81 @@ }, "time": "2023-06-19T06:10:36+00:00" }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" + }, + "time": "2024-07-08T12:26:09+00:00" + }, { "name": "doctrine/cache", "version": "2.2.0", @@ -639,38 +862,38 @@ }, { "name": "doctrine/dbal", - "version": "3.3.8", + "version": "3.9.4", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "f873a820227bc352d023791775a01f078a30dfe1" + "reference": "ec16c82f20be1a7224e65ac67144a29199f87959" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/f873a820227bc352d023791775a01f078a30dfe1", - "reference": "f873a820227bc352d023791775a01f078a30dfe1", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/ec16c82f20be1a7224e65ac67144a29199f87959", + "reference": "ec16c82f20be1a7224e65ac67144a29199f87959", "shasum": "" }, "require": { "composer-runtime-api": "^2", "doctrine/cache": "^1.11|^2.0", "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1.0", - "php": "^7.3 || ^8.0", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" }, "require-dev": { - "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2022.1", - "phpstan/phpstan": "1.8.2", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "9.5.21", - "psalm/plugin-phpunit": "0.17.0", - "squizlabs/php_codesniffer": "3.7.1", - "symfony/cache": "^5.2|^6.0", - "symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0", - "vimeo/psalm": "4.24.0" + "doctrine/coding-standard": "12.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "2.1.1", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "9.6.22", + "slevomat/coding-standard": "8.13.1", + "squizlabs/php_codesniffer": "3.10.2", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/console": "^4.4|^5.4|^6.0|^7.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -730,7 +953,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.3.8" + "source": "https://github.com/doctrine/dbal/tree/3.9.4" }, "funding": [ { @@ -746,33 +969,31 @@ "type": "tidelift" } ], - "time": "2022-08-05T15:35:35+00:00" + "time": "2025-01-16T08:28:55+00:00" }, { "name": "doctrine/deprecations", - "version": "v1.1.1", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3" + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9", + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "1.4.10 || 2.0.3", + "phpstan/phpstan-phpunit": "^1.0 || ^2", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" + "psr/log": "^1 || ^2 || ^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -780,7 +1001,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -791,36 +1012,35 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.1.1" + "source": "https://github.com/doctrine/deprecations/tree/1.1.4" }, - "time": "2023-06-03T09:27:29+00:00" + "time": "2024-12-07T21:18:45+00:00" }, { "name": "doctrine/event-manager", - "version": "1.2.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e", + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e", "shasum": "" }, "require": { - "doctrine/deprecations": "^0.5.3 || ^1", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "conflict": { "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.8", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.24" + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^10.5", + "vimeo/psalm": "^5.24" }, "type": "library", "autoload": { @@ -869,7 +1089,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.2.0" + "source": "https://github.com/doctrine/event-manager/tree/2.0.1" }, "funding": [ { @@ -885,20 +1105,20 @@ "type": "tidelift" } ], - "time": "2022-10-12T20:51:15+00:00" + "time": "2024-05-22T20:47:39+00:00" }, { "name": "doctrine/inflector", - "version": "2.0.8", + "version": "2.0.10", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", "shasum": "" }, "require": { @@ -960,7 +1180,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.8" + "source": "https://github.com/doctrine/inflector/tree/2.0.10" }, "funding": [ { @@ -976,7 +1196,7 @@ "type": "tidelift" } ], - "time": "2023-06-16T13:40:37+00:00" + "time": "2024-02-18T20:23:39+00:00" }, { "name": "doctrine/lexer", @@ -1056,16 +1276,16 @@ }, { "name": "dompdf/dompdf", - "version": "v2.0.3", + "version": "v2.0.8", "source": { "type": "git", "url": "https://github.com/dompdf/dompdf.git", - "reference": "e8d2d5e37e8b0b30f0732a011295ab80680d7e85" + "reference": "c20247574601700e1f7c8dab39310fca1964dc52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/e8d2d5e37e8b0b30f0732a011295ab80680d7e85", - "reference": "e8d2d5e37e8b0b30f0732a011295ab80680d7e85", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/c20247574601700e1f7c8dab39310fca1964dc52", + "reference": "c20247574601700e1f7c8dab39310fca1964dc52", "shasum": "" }, "require": { @@ -1073,7 +1293,7 @@ "ext-mbstring": "*", "masterminds/html5": "^2.0", "phenx/php-font-lib": ">=0.5.4 <1.0.0", - "phenx/php-svg-lib": ">=0.3.3 <1.0.0", + "phenx/php-svg-lib": ">=0.5.2 <1.0.0", "php": "^7.1 || ^8.0" }, "require-dev": { @@ -1112,22 +1332,22 @@ "homepage": "https://github.com/dompdf/dompdf", "support": { "issues": "https://github.com/dompdf/dompdf/issues", - "source": "https://github.com/dompdf/dompdf/tree/v2.0.3" + "source": "https://github.com/dompdf/dompdf/tree/v2.0.8" }, - "time": "2023-02-07T12:51:48+00:00" + "time": "2024-04-29T13:06:17+00:00" }, { "name": "dragonmantank/cron-expression", - "version": "v3.3.3", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" + "reference": "8c784d071debd117328803d86b2097615b457500" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", - "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", + "reference": "8c784d071debd117328803d86b2097615b457500", "shasum": "" }, "require": { @@ -1140,10 +1360,14 @@ "require-dev": { "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^1.0", - "phpstan/phpstan-webmozart-assert": "^1.0", "phpunit/phpunit": "^7.0|^8.0|^9.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, "autoload": { "psr-4": { "Cron\\": "src/Cron/" @@ -1167,7 +1391,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" }, "funding": [ { @@ -1175,7 +1399,7 @@ "type": "github" } ], - "time": "2023-08-10T19:36:49+00:00" + "time": "2024-10-09T13:47:03+00:00" }, { "name": "egulias/email-validator", @@ -1247,20 +1471,20 @@ }, { "name": "ezyang/htmlpurifier", - "version": "v4.16.0", + "version": "v4.18.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8" + "reference": "cb56001e54359df7ae76dc522d08845dc741621b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/523407fb06eb9e5f3d59889b3978d5bfe94299c8", - "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", + "reference": "cb56001e54359df7ae76dc522d08845dc741621b", "shasum": "" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "require-dev": { "cerdic/css-tidy": "^1.7 || ^2.0", @@ -1302,9 +1526,9 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.16.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" }, - "time": "2022-09-18T07:06:19+00:00" + "time": "2024-11-01T03:51:45+00:00" }, { "name": "fideloper/proxy", @@ -1366,26 +1590,26 @@ }, { "name": "firebase/php-jwt", - "version": "v6.4.0", + "version": "v6.11.0", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "4dd1e007f22a927ac77da5a3fbb067b42d3bc224" + "reference": "8f718f4dfc9c5d5f0c994cdfd103921b43592712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/4dd1e007f22a927ac77da5a3fbb067b42d3bc224", - "reference": "4dd1e007f22a927ac77da5a3fbb067b42d3bc224", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/8f718f4dfc9c5d5f0c994cdfd103921b43592712", + "reference": "8f718f4dfc9c5d5f0c994cdfd103921b43592712", "shasum": "" }, "require": { - "php": "^7.1||^8.0" + "php": "^8.0" }, "require-dev": { - "guzzlehttp/guzzle": "^6.5||^7.4", - "phpspec/prophecy-phpunit": "^1.1", - "phpunit/phpunit": "^7.5||^9.5", - "psr/cache": "^1.0||^2.0", + "guzzlehttp/guzzle": "^7.4", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "psr/cache": "^2.0||^3.0", "psr/http-client": "^1.0", "psr/http-factory": "^1.0" }, @@ -1423,9 +1647,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.4.0" + "source": "https://github.com/firebase/php-jwt/tree/v6.11.0" }, - "time": "2023-02-09T21:01:23+00:00" + "time": "2025-01-23T05:11:06+00:00" }, { "name": "fruitcake/laravel-cors", @@ -1509,24 +1733,24 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.1.1", + "version": "v1.1.3", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831" + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.1" + "phpoption/phpoption": "^1.9.3" }, "require-dev": { - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "autoload": { @@ -1555,7 +1779,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.1" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" }, "funding": [ { @@ -1567,26 +1791,26 @@ "type": "tidelift" } ], - "time": "2023-02-25T20:23:15+00:00" + "time": "2024-07-20T21:45:45+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.8.0", + "version": "7.9.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9" + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9", - "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.1", - "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1595,11 +1819,11 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "guzzle/client-integration-tests": "3.0.2", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -1677,7 +1901,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.8.0" + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" }, "funding": [ { @@ -1693,28 +1917,28 @@ "type": "tidelift" } ], - "time": "2023-08-27T10:20:53+00:00" + "time": "2024-07-24T11:22:20+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.1", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "111166291a0f8130081195ac4556a5587d7f1b5d" + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d", - "reference": "111166291a0f8130081195ac4556a5587d7f1b5d", + "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "type": "library", "extra": { @@ -1760,7 +1984,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.1" + "source": "https://github.com/guzzle/promises/tree/2.0.4" }, "funding": [ { @@ -1776,20 +2000,20 @@ "type": "tidelift" } ], - "time": "2023-08-03T15:11:55+00:00" + "time": "2024-10-17T10:06:22+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.6.1", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727" + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727", - "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", "shasum": "" }, "require": { @@ -1803,9 +2027,9 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -1876,7 +2100,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6.1" + "source": "https://github.com/guzzle/psr7/tree/2.7.0" }, "funding": [ { @@ -1892,7 +2116,7 @@ "type": "tidelift" } ], - "time": "2023-08-27T10:13:57+00:00" + "time": "2024-07-18T11:15:46+00:00" }, { "name": "intervention/image", @@ -1924,16 +2148,16 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - }, "laravel": { - "providers": [ - "Intervention\\Image\\ImageServiceProvider" - ], "aliases": { "Image": "Intervention\\Image\\Facades\\Image" - } + }, + "providers": [ + "Intervention\\Image\\ImageServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "2.4-dev" } }, "autoload": { @@ -2001,16 +2225,16 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - }, "laravel": { - "providers": [ - "Jenssegers\\Date\\DateServiceProvider" - ], "aliases": { "Date": "Jenssegers\\Date\\Date" - } + }, + "providers": [ + "Jenssegers\\Date\\DateServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "3.1-dev" } }, "autoload": { @@ -2057,22 +2281,27 @@ }, { "name": "joedixon/laravel-translation", - "version": "v1.1.2", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/joedixon/laravel-translation.git", - "reference": "4a467398bae73cd16522d523b557e96f3455b9d2" + "reference": "feba4d1e3d12722ca60c05d9180f39b7de227e4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/joedixon/laravel-translation/zipball/4a467398bae73cd16522d523b557e96f3455b9d2", - "reference": "4a467398bae73cd16522d523b557e96f3455b9d2", + "url": "https://api.github.com/repos/joedixon/laravel-translation/zipball/feba4d1e3d12722ca60c05d9180f39b7de227e4e", + "reference": "feba4d1e3d12722ca60c05d9180f39b7de227e4e", "shasum": "" }, + "require": { + "illuminate/support": "^8.0||^9.0||^10.0", + "laravel/legacy-factories": "^1.3", + "php": "^8.0" + }, "require-dev": { "mockery/mockery": "^1.0.0", - "orchestra/testbench": "^4.0", - "phpunit/phpunit": "^8.0" + "orchestra/testbench": "^6.0|^8.0", + "phpunit/phpunit": "^9.0|^10.0" }, "type": "library", "extra": { @@ -2101,41 +2330,41 @@ "description": "A tool for managing all of your Laravel translations", "support": { "issues": "https://github.com/joedixon/laravel-translation/issues", - "source": "https://github.com/joedixon/laravel-translation/tree/master" + "source": "https://github.com/joedixon/laravel-translation/tree/v2.2.0" }, - "time": "2020-04-13T20:06:24+00:00" + "time": "2023-04-26T09:40:52+00:00" }, { "name": "laracasts/flash", - "version": "3.2.2", + "version": "3.2.4", "source": { "type": "git", "url": "https://github.com/laracasts/flash.git", - "reference": "6330bc3c027d3c03188b41c58133016f8226b8fb" + "reference": "0ea47bfbf12a33113247c367798a34e519020f8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laracasts/flash/zipball/6330bc3c027d3c03188b41c58133016f8226b8fb", - "reference": "6330bc3c027d3c03188b41c58133016f8226b8fb", + "url": "https://api.github.com/repos/laracasts/flash/zipball/0ea47bfbf12a33113247c367798a34e519020f8d", + "reference": "0ea47bfbf12a33113247c367798a34e519020f8d", "shasum": "" }, "require": { - "illuminate/support": "~5.0|^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/support": "~5.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "php": ">=5.4.0" }, "require-dev": { "mockery/mockery": "dev-master", - "phpunit/phpunit": "^6.1|^9.5.10" + "phpunit/phpunit": "^6.1|^9.5.10|^10.5" }, "type": "library", "extra": { "laravel": { - "providers": [ - "Laracasts\\Flash\\FlashServiceProvider" - ], "aliases": { "Flash": "Laracasts\\Flash\\Flash" - } + }, + "providers": [ + "Laracasts\\Flash\\FlashServiceProvider" + ] } }, "autoload": { @@ -2158,22 +2387,22 @@ ], "description": "Easy flash notifications", "support": { - "source": "https://github.com/laracasts/flash/tree/3.2.2" + "source": "https://github.com/laracasts/flash/tree/3.2.4" }, - "time": "2023-01-30T20:31:40+00:00" + "time": "2025-02-06T14:43:27+00:00" }, { "name": "laravel/framework", - "version": "v8.83.27", + "version": "v8.83.29", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "e1afe088b4ca613fb96dc57e6d8dbcb8cc2c6b49" + "reference": "d841a226a50c715431952a10260ba4fac9e91cc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/e1afe088b4ca613fb96dc57e6d8dbcb8cc2c6b49", - "reference": "e1afe088b4ca613fb96dc57e6d8dbcb8cc2c6b49", + "url": "https://api.github.com/repos/laravel/framework/zipball/d841a226a50c715431952a10260ba4fac9e91cc4", + "reference": "d841a226a50c715431952a10260ba4fac9e91cc4", "shasum": "" }, "require": { @@ -2333,28 +2562,29 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-12-08T15:28:55+00:00" + "time": "2024-11-20T15:55:41+00:00" }, { "name": "laravel/helpers", - "version": "v1.6.0", + "version": "v1.7.2", "source": { "type": "git", "url": "https://github.com/laravel/helpers.git", - "reference": "4dd0f9436d3911611622a6ced8329a1710576f60" + "reference": "672d79d5b5f65dc821e57783fa11f22c4d762d70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/helpers/zipball/4dd0f9436d3911611622a6ced8329a1710576f60", - "reference": "4dd0f9436d3911611622a6ced8329a1710576f60", + "url": "https://api.github.com/repos/laravel/helpers/zipball/672d79d5b5f65dc821e57783fa11f22c4d762d70", + "reference": "672d79d5b5f65dc821e57783fa11f22c4d762d70", "shasum": "" }, "require": { - "illuminate/support": "~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0", - "php": "^7.1.3|^8.0" + "illuminate/support": "~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "php": "^7.2.0|^8.0" }, "require-dev": { - "phpunit/phpunit": "^7.0|^8.0|^9.0" + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^7.0|^8.0|^9.0|^10.0" }, "type": "library", "extra": { @@ -2387,9 +2617,65 @@ "laravel" ], "support": { - "source": "https://github.com/laravel/helpers/tree/v1.6.0" + "source": "https://github.com/laravel/helpers/tree/v1.7.2" }, - "time": "2023-01-09T14:48:11+00:00" + "time": "2025-01-24T15:41:25+00:00" + }, + { + "name": "laravel/legacy-factories", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/legacy-factories.git", + "reference": "cd0f8c77d116bac121e9779fcff1f71801aaac50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/legacy-factories/zipball/cd0f8c77d116bac121e9779fcff1f71801aaac50", + "reference": "cd0f8c77d116bac121e9779fcff1f71801aaac50", + "shasum": "" + }, + "require": { + "illuminate/macroable": "^8.0|^9.0|^10.0|^11.0|^12.0", + "php": "^7.3|^8.0", + "symfony/finder": "^3.4|^4.0|^5.0|^6.0|^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Illuminate\\Database\\Eloquent\\LegacyFactoryServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "files": [ + "helpers.php" + ], + "psr-4": { + "Illuminate\\Database\\Eloquent\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The legacy version of the Laravel Eloquent factories.", + "homepage": "http://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2025-01-24T15:41:36+00:00" }, { "name": "laravel/passport", @@ -2431,13 +2717,13 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - }, "laravel": { "providers": [ "Laravel\\Passport\\PassportServiceProvider" ] + }, + "branch-alias": { + "dev-master": "10.x-dev" } }, "autoload": { @@ -2470,26 +2756,27 @@ }, { "name": "laravel/serializable-closure", - "version": "v1.3.1", + "version": "v1.3.7", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902" + "reference": "4f48ade902b94323ca3be7646db16209ec76be3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/e5a3057a5591e1cfe8183034b0203921abe2c902", - "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/4f48ade902b94323ca3be7646db16209ec76be3d", + "reference": "4f48ade902b94323ca3be7646db16209ec76be3d", "shasum": "" }, "require": { "php": "^7.3|^8.0" }, "require-dev": { - "nesbot/carbon": "^2.61", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0", + "nesbot/carbon": "^2.61|^3.0", "pestphp/pest": "^1.21.3", "phpstan/phpstan": "^1.8.2", - "symfony/var-dumper": "^5.4.11" + "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0" }, "type": "library", "extra": { @@ -2526,43 +2813,40 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2023-07-14T13:56:28+00:00" + "time": "2024-11-14T18:34:49+00:00" }, { "name": "laravel/tinker", - "version": "v2.8.2", + "version": "v2.10.1", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "b936d415b252b499e8c3b1f795cd4fc20f57e1f3" + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/b936d415b252b499e8c3b1f795cd4fc20f57e1f3", - "reference": "b936d415b252b499e8c3b1f795cd4fc20f57e1f3", + "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3", + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3", "shasum": "" }, "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "php": "^7.2.5|^8.0", - "psy/psysh": "^0.10.4|^0.11.1", - "symfony/var-dumper": "^4.3.4|^5.0|^6.0" + "psy/psysh": "^0.11.1|^0.12.0", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" }, "require-dev": { "mockery/mockery": "~1.3.3|^1.4.2", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.5.8|^9.3.3" + "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" }, "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0)." + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, "laravel": { "providers": [ "Laravel\\Tinker\\TinkerServiceProvider" @@ -2593,9 +2877,9 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.8.2" + "source": "https://github.com/laravel/tinker/tree/v2.10.1" }, - "time": "2023-08-15T14:27:00+00:00" + "time": "2025-01-27T14:24:01+00:00" }, { "name": "laravel/ui", @@ -2623,13 +2907,13 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - }, "laravel": { "providers": [ "Laravel\\Ui\\UiServiceProvider" ] + }, + "branch-alias": { + "dev-master": "3.x-dev" } }, "autoload": { @@ -2732,69 +3016,56 @@ "time": "2023-04-25T02:46:11+00:00" }, { - "name": "lcobucci/jwt", - "version": "3.4.6", + "name": "lcobucci/clock", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/lcobucci/jwt.git", - "reference": "3ef8657a78278dfeae7707d51747251db4176240" + "url": "https://github.com/lcobucci/clock.git", + "reference": "039ef98c6b57b101d10bd11d8fdfda12cbd996dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/3ef8657a78278dfeae7707d51747251db4176240", - "reference": "3ef8657a78278dfeae7707d51747251db4176240", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/039ef98c6b57b101d10bd11d8fdfda12cbd996dc", + "reference": "039ef98c6b57b101d10bd11d8fdfda12cbd996dc", "shasum": "" }, "require": { - "ext-mbstring": "*", - "ext-openssl": "*", - "php": "^5.6 || ^7.0" + "php": "~8.1.0 || ~8.2.0", + "psr/clock": "^1.0" + }, + "provide": { + "psr/clock-implementation": "1.0" }, "require-dev": { - "mikey179/vfsstream": "~1.5", - "phpmd/phpmd": "~2.2", - "phpunit/php-invoker": "~1.1", - "phpunit/phpunit": "^5.7 || ^7.3", - "squizlabs/php_codesniffer": "~2.3" - }, - "suggest": { - "lcobucci/clock": "*" + "infection/infection": "^0.26", + "lcobucci/coding-standard": "^9.0", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-deprecation-rules": "^1.1.1", + "phpstan/phpstan-phpunit": "^1.3.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^9.5.27" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, "autoload": { - "files": [ - "compat/class-aliases.php", - "compat/json-exception-polyfill.php", - "compat/lcobucci-clock-polyfill.php" - ], "psr-4": { - "Lcobucci\\JWT\\": "src" + "Lcobucci\\Clock\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Luís Otávio Cobucci Oblonczyk", - "email": "lcobucci@gmail.com", - "role": "Developer" + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com" } ], - "description": "A simple library to work with JSON Web Token and JSON Web Signature", - "keywords": [ - "JWS", - "jwt" - ], + "description": "Yet another clock abstraction", "support": { - "issues": "https://github.com/lcobucci/jwt/issues", - "source": "https://github.com/lcobucci/jwt/tree/3.4.6" + "issues": "https://github.com/lcobucci/clock/issues", + "source": "https://github.com/lcobucci/clock/tree/3.0.0" }, "funding": [ { @@ -2806,46 +3077,133 @@ "type": "patreon" } ], - "time": "2021-09-28T19:18:28+00:00" + "time": "2022-12-19T15:00:24+00:00" }, { - "name": "league/commonmark", - "version": "1.6.7", + "name": "lcobucci/jwt", + "version": "4.3.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/commonmark.git", - "reference": "2b8185c13bc9578367a5bf901881d1c1b5bbd09b" + "url": "https://github.com/lcobucci/jwt.git", + "reference": "4d7de2fe0d51a96418c0d04004986e410e87f6b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/2b8185c13bc9578367a5bf901881d1c1b5bbd09b", - "reference": "2b8185c13bc9578367a5bf901881d1c1b5bbd09b", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/4d7de2fe0d51a96418c0d04004986e410e87f6b4", + "reference": "4d7de2fe0d51a96418c0d04004986e410e87f6b4", + "shasum": "" + }, + "require": { + "ext-hash": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-sodium": "*", + "lcobucci/clock": "^2.0 || ^3.0", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "infection/infection": "^0.21", + "lcobucci/coding-standard": "^6.0", + "mikey179/vfsstream": "^1.6.7", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/php-invoker": "^3.1", + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "support": { + "issues": "https://github.com/lcobucci/jwt/issues", + "source": "https://github.com/lcobucci/jwt/tree/4.3.0" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2023-01-02T13:28:00+00:00" + }, + { + "name": "league/commonmark", + "version": "2.6.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "d990688c91cedfb69753ffc2512727ec646df2ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d990688c91cedfb69753ffc2512727ec646df2ad", + "reference": "d990688c91cedfb69753ffc2512727ec646df2ad", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "scrutinizer/ocular": "1.7.*" + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "cebe/markdown": "~1.0", - "commonmark/commonmark.js": "0.29.2", - "erusev/parsedown": "~1.0", + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", "ext-json": "*", "github/gfm": "0.29.0", - "michelf/php-markdown": "~1.4", - "mikehaertl/php-shellcommand": "^1.4", - "phpstan/phpstan": "^0.12.90", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2", - "scrutinizer/ocular": "^1.5", - "symfony/finder": "^4.2" + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 | ^7.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" }, - "bin": [ - "bin/commonmark" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.7-dev" + } + }, "autoload": { "psr-4": { "League\\CommonMark\\": "src" @@ -2863,7 +3221,7 @@ "role": "Lead Developer" } ], - "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)", + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", "homepage": "https://commonmark.thephpleague.com", "keywords": [ "commonmark", @@ -2877,6 +3235,7 @@ ], "support": { "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", "issues": "https://github.com/thephpleague/commonmark/issues", "rss": "https://github.com/thephpleague/commonmark/releases.atom", "source": "https://github.com/thephpleague/commonmark" @@ -2899,7 +3258,89 @@ "type": "tidelift" } ], - "time": "2022-01-13T17:18:13+00:00" + "time": "2024-12-29T14:10:59+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" }, { "name": "league/event", @@ -3051,26 +3492,26 @@ }, { "name": "league/mime-type-detection", - "version": "1.12.0", + "version": "1.16.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "c7f2872fb273bf493811473dafc88d60ae829f48" + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/c7f2872fb273bf493811473dafc88d60ae829f48", - "reference": "c7f2872fb273bf493811473dafc88d60ae829f48", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", "shasum": "" }, "require": { "ext-fileinfo": "*", - "php": "^7.2 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.2", "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3" + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" }, "type": "library", "autoload": { @@ -3091,7 +3532,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.12.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" }, "funding": [ { @@ -3103,41 +3544,41 @@ "type": "tidelift" } ], - "time": "2023-08-03T07:14:11+00:00" + "time": "2024-09-21T08:32:55+00:00" }, { "name": "league/oauth2-server", - "version": "8.4.2", + "version": "8.5.5", "source": { "type": "git", "url": "https://github.com/thephpleague/oauth2-server.git", - "reference": "007dc5f6c0151a73b133fec36c9686cc956209d3" + "reference": "cc8778350f905667e796b3c2364a9d3bd7a73518" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/007dc5f6c0151a73b133fec36c9686cc956209d3", - "reference": "007dc5f6c0151a73b133fec36c9686cc956209d3", + "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/cc8778350f905667e796b3c2364a9d3bd7a73518", + "reference": "cc8778350f905667e796b3c2364a9d3bd7a73518", "shasum": "" }, "require": { - "defuse/php-encryption": "^2.2.1", - "ext-json": "*", + "defuse/php-encryption": "^2.3", "ext-openssl": "*", - "lcobucci/jwt": "^3.4.6 || ^4.0.4", + "lcobucci/clock": "^2.2 || ^3.0", + "lcobucci/jwt": "^4.3 || ^5.0", "league/event": "^2.2", - "league/uri": "^6.4", - "php": "^7.2 || ^8.0", - "psr/http-message": "^1.0.1" + "league/uri": "^6.7 || ^7.0", + "php": "^8.0", + "psr/http-message": "^1.0.1 || ^2.0" }, "replace": { "league/oauth2server": "*", "lncd/oauth2": "*" }, "require-dev": { - "laminas/laminas-diactoros": "^2.4.1", + "laminas/laminas-diactoros": "^3.0.0", "phpstan/phpstan": "^0.12.57", "phpstan/phpstan-phpunit": "^0.12.16", - "phpunit/phpunit": "^8.5.13", + "phpunit/phpunit": "^9.6.6", "roave/security-advisories": "dev-master" }, "type": "library", @@ -3183,7 +3624,7 @@ ], "support": { "issues": "https://github.com/thephpleague/oauth2-server/issues", - "source": "https://github.com/thephpleague/oauth2-server/tree/8.4.2" + "source": "https://github.com/thephpleague/oauth2-server/tree/8.5.5" }, "funding": [ { @@ -3191,54 +3632,48 @@ "type": "github" } ], - "time": "2023-08-02T22:54:39+00:00" + "time": "2024-12-20T23:06:10+00:00" }, { "name": "league/uri", - "version": "6.5.0", + "version": "7.5.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "c68ca445abb04817d740ddd6d0b3551826ef0c5a" + "reference": "81fb5145d2644324614cc532b28efd0215bda430" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/c68ca445abb04817d740ddd6d0b3551826ef0c5a", - "reference": "c68ca445abb04817d740ddd6d0b3551826ef0c5a", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", + "reference": "81fb5145d2644324614cc532b28efd0215bda430", "shasum": "" }, "require": { - "ext-json": "*", - "league/uri-interfaces": "^2.3", - "php": "^7.3 || ^8.0", - "psr/http-message": "^1.0" + "league/uri-interfaces": "^7.5", + "php": "^8.1" }, "conflict": { "league/uri-schemes": "^1.0" }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.19 || ^3.0", - "phpstan/phpstan": "^0.12.90", - "phpstan/phpstan-phpunit": "^0.12.22", - "phpstan/phpstan-strict-rules": "^0.12.11", - "phpunit/phpunit": "^8.0 || ^9.0", - "psr/http-factory": "^1.0" - }, "suggest": { - "ext-fileinfo": "Needed to create Data URI from a filepath", - "ext-intl": "Needed to improve host validation", - "league/uri-components": "Needed to easily manipulate URI objects", - "psr/http-factory": "Needed to use the URI factory" + "ext-bcmath": "to improve IPV4 host parsing", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", + "league/uri-components": "Needed to easily manipulate URI objects components", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.x-dev" + "dev-master": "7.x-dev" } }, "autoload": { "psr-4": { - "League\\Uri\\": "src" + "League\\Uri\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -3253,7 +3688,7 @@ } ], "description": "URI manipulation library", - "homepage": "http://uri.thephpleague.com", + "homepage": "https://uri.thephpleague.com", "keywords": [ "data-uri", "file-uri", @@ -3278,8 +3713,8 @@ "support": { "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri/issues", - "source": "https://github.com/thephpleague/uri/tree/6.5.0" + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/7.5.1" }, "funding": [ { @@ -3287,46 +3722,44 @@ "type": "github" } ], - "time": "2021-08-27T09:54:07+00:00" + "time": "2024-12-08T08:40:02+00:00" }, { "name": "league/uri-interfaces", - "version": "2.3.0", + "version": "7.5.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383" + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", - "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", "shasum": "" }, "require": { - "ext-json": "*", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.19", - "phpstan/phpstan": "^0.12.90", - "phpstan/phpstan-phpunit": "^0.12.19", - "phpstan/phpstan-strict-rules": "^0.12.9", - "phpunit/phpunit": "^8.5.15 || ^9.5" + "ext-filter": "*", + "php": "^8.1", + "psr/http-factory": "^1", + "psr/http-message": "^1.1 || ^2.0" }, "suggest": { - "ext-intl": "to use the IDNA feature", - "symfony/intl": "to use the IDNA feature via Symfony Polyfill" + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "7.x-dev" } }, "autoload": { "psr-4": { - "League\\Uri\\": "src/" + "League\\Uri\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -3340,17 +3773,32 @@ "homepage": "https://nyamsprod.com" } ], - "description": "Common interface for URI representation", - "homepage": "http://github.com/thephpleague/uri-interfaces", + "description": "Common interfaces and classes for URI representation and interaction", + "homepage": "https://uri.thephpleague.com", "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", "rfc3986", "rfc3987", + "rfc6570", "uri", - "url" + "url", + "ws" ], "support": { - "issues": "https://github.com/thephpleague/uri-interfaces/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/2.3.0" + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" }, "funding": [ { @@ -3358,43 +3806,44 @@ "type": "github" } ], - "time": "2021-06-28T04:27:21+00:00" + "time": "2024-12-08T08:18:47+00:00" }, { "name": "maatwebsite/excel", - "version": "3.1.48", + "version": "3.1.63", "source": { "type": "git", "url": "https://github.com/SpartnerNL/Laravel-Excel.git", - "reference": "6d0fe2a1d195960c7af7bf0de760582da02a34b9" + "reference": "fccd234da23b39ab03e1a1f6fe9178fb96ec1be1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SpartnerNL/Laravel-Excel/zipball/6d0fe2a1d195960c7af7bf0de760582da02a34b9", - "reference": "6d0fe2a1d195960c7af7bf0de760582da02a34b9", + "url": "https://api.github.com/repos/SpartnerNL/Laravel-Excel/zipball/fccd234da23b39ab03e1a1f6fe9178fb96ec1be1", + "reference": "fccd234da23b39ab03e1a1f6fe9178fb96ec1be1", "shasum": "" }, "require": { "composer/semver": "^3.3", "ext-json": "*", - "illuminate/support": "5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0", - "php": "^7.0|^8.0", - "phpoffice/phpspreadsheet": "^1.18", - "psr/simple-cache": "^1.0|^2.0|^3.0" + "illuminate/support": "5.8.*||^6.0||^7.0||^8.0||^9.0||^10.0||^11.0||^12.0", + "php": "^7.0||^8.0", + "phpoffice/phpspreadsheet": "^1.29.9", + "psr/simple-cache": "^1.0||^2.0||^3.0" }, "require-dev": { - "orchestra/testbench": "^6.0|^7.0|^8.0", + "laravel/scout": "^7.0||^8.0||^9.0||^10.0", + "orchestra/testbench": "^6.0||^7.0||^8.0||^9.0||^10.0", "predis/predis": "^1.1" }, "type": "library", "extra": { "laravel": { - "providers": [ - "Maatwebsite\\Excel\\ExcelServiceProvider" - ], "aliases": { "Excel": "Maatwebsite\\Excel\\Facades\\Excel" - } + }, + "providers": [ + "Maatwebsite\\Excel\\ExcelServiceProvider" + ] } }, "autoload": { @@ -3426,7 +3875,7 @@ ], "support": { "issues": "https://github.com/SpartnerNL/Laravel-Excel/issues", - "source": "https://github.com/SpartnerNL/Laravel-Excel/tree/3.1.48" + "source": "https://github.com/SpartnerNL/Laravel-Excel/tree/3.1.63" }, "funding": [ { @@ -3438,33 +3887,39 @@ "type": "github" } ], - "time": "2023-02-22T21:01:38+00:00" + "time": "2025-02-19T14:24:57+00:00" }, { "name": "maennchen/zipstream-php", - "version": "2.1.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/maennchen/ZipStream-PHP.git", - "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58" + "reference": "6187e9cc4493da94b9b63eb2315821552015fca9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/c4c5803cc1f93df3d2448478ef79394a5981cc58", - "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/6187e9cc4493da94b9b63eb2315821552015fca9", + "reference": "6187e9cc4493da94b9b63eb2315821552015fca9", "shasum": "" }, "require": { - "myclabs/php-enum": "^1.5", - "php": ">= 7.1", - "psr/http-message": "^1.0", - "symfony/polyfill-mbstring": "^1.0" + "ext-mbstring": "*", + "ext-zlib": "*", + "php-64bit": "^8.1" }, "require-dev": { "ext-zip": "*", - "guzzlehttp/guzzle": ">= 6.3", + "friendsofphp/php-cs-fixer": "^3.16", + "guzzlehttp/guzzle": "^7.5", "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": ">= 7.5" + "php-coveralls/php-coveralls": "^2.5", + "phpunit/phpunit": "^10.0", + "vimeo/psalm": "^5.0" + }, + "suggest": { + "guzzlehttp/psr7": "^2.4", + "psr/http-message": "^2.0" }, "type": "library", "autoload": { @@ -3501,19 +3956,15 @@ ], "support": { "issues": "https://github.com/maennchen/ZipStream-PHP/issues", - "source": "https://github.com/maennchen/ZipStream-PHP/tree/2.1.0" + "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.1" }, "funding": [ { "url": "https://github.com/maennchen", "type": "github" - }, - { - "url": "https://opencollective.com/zipstream", - "type": "open_collective" } ], - "time": "2020-05-30T13:11:16+00:00" + "time": "2024-10-10T12:33:01+00:00" }, { "name": "markbaker/complex", @@ -3624,16 +4075,16 @@ }, { "name": "masterminds/html5", - "version": "2.8.1", + "version": "2.9.0", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf" + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f47dcf3c70c584de14f21143c55d9939631bc6cf", - "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", "shasum": "" }, "require": { @@ -3641,7 +4092,7 @@ "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8" + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" }, "type": "library", "extra": { @@ -3685,22 +4136,22 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.8.1" + "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" }, - "time": "2023-05-10T11:58:31+00:00" + "time": "2024-03-31T07:05:07+00:00" }, { "name": "monolog/monolog", - "version": "2.9.1", + "version": "2.10.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1" + "reference": "5cf826f2991858b54d5c3809bee745560a1042a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/5cf826f2991858b54d5c3809bee745560a1042a7", + "reference": "5cf826f2991858b54d5c3809bee745560a1042a7", "shasum": "" }, "require": { @@ -3721,8 +4172,8 @@ "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", "phpspec/prophecy": "^1.15", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5.14", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.38 || ^9.6.19", "predis/predis": "^1.1 || ^2.0", "rollbar/rollbar": "^1.3 || ^2 || ^3", "ruflin/elastica": "^7", @@ -3777,7 +4228,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.9.1" + "source": "https://github.com/Seldaek/monolog/tree/2.10.0" }, "funding": [ { @@ -3789,86 +4240,24 @@ "type": "tidelift" } ], - "time": "2023-02-06T13:44:46+00:00" - }, - { - "name": "myclabs/php-enum", - "version": "1.8.4", - "source": { - "type": "git", - "url": "https://github.com/myclabs/php-enum.git", - "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/php-enum/zipball/a867478eae49c9f59ece437ae7f9506bfaa27483", - "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.3 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.5", - "squizlabs/php_codesniffer": "1.*", - "vimeo/psalm": "^4.6.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "MyCLabs\\Enum\\": "src/" - }, - "classmap": [ - "stubs/Stringable.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP Enum contributors", - "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" - } - ], - "description": "PHP Enum implementation", - "homepage": "http://github.com/myclabs/php-enum", - "keywords": [ - "enum" - ], - "support": { - "issues": "https://github.com/myclabs/php-enum/issues", - "source": "https://github.com/myclabs/php-enum/tree/1.8.4" - }, - "funding": [ - { - "url": "https://github.com/mnapoli", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum", - "type": "tidelift" - } - ], - "time": "2022-08-04T09:53:51+00:00" + "time": "2024-11-12T12:43:37+00:00" }, { "name": "nesbot/carbon", - "version": "2.70.0", + "version": "2.73.0", "source": { "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "d3298b38ea8612e5f77d38d1a99438e42f70341d" + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/d3298b38ea8612e5f77d38d1a99438e42f70341d", - "reference": "d3298b38ea8612e5f77d38d1a99438e42f70341d", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/9228ce90e1035ff2f0db84b40ec2e023ed802075", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075", "shasum": "" }, "require": { + "carbonphp/carbon-doctrine-types": "*", "ext-json": "*", "php": "^7.1.8 || ^8.0", "psr/clock": "^1.0", @@ -3880,11 +4269,11 @@ "psr/clock-implementation": "1.0" }, "require-dev": { - "doctrine/dbal": "^2.0 || ^3.1.4", - "doctrine/orm": "^2.7", + "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", + "doctrine/orm": "^2.7 || ^3.0", "friendsofphp/php-cs-fixer": "^3.0", "kylekatarnls/multi-tester": "^2.0", - "ondrejmirtes/better-reflection": "*", + "ondrejmirtes/better-reflection": "<6", "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^0.12.99 || ^1.7.14", @@ -3897,10 +4286,6 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-3.x": "3.x-dev", - "dev-master": "2.x-dev" - }, "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -3910,6 +4295,10 @@ "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" } }, "autoload": { @@ -3958,29 +4347,179 @@ "type": "tidelift" } ], - "time": "2023-09-07T16:43:50+00:00" + "time": "2025-01-08T20:10:23+00:00" }, { - "name": "nikic/php-parser", - "version": "v4.17.1", + "name": "nette/schema", + "version": "v1.3.2", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" + "url": "https://github.com/nette/schema.git", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d", "shasum": "" }, "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.4" + }, + "require-dev": { + "nette/tester": "^2.5.2", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.2" + }, + "time": "2024-10-06T23:10:23+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.5", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "shasum": "" + }, + "require": { + "php": "8.0 - 8.4" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.5", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.5" + }, + "time": "2024-08-07T15:39:19+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.4.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" @@ -3988,7 +4527,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -4012,22 +4551,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2023-08-13T19:53:39+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "nyholm/psr7", - "version": "1.8.0", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/Nyholm/psr7.git", - "reference": "3cb4d163b58589e47b35103e8e5e6a6a475b47be" + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Nyholm/psr7/zipball/3cb4d163b58589e47b35103e8e5e6a6a475b47be", - "reference": "3cb4d163b58589e47b35103e8e5e6a6a475b47be", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3", "shasum": "" }, "require": { @@ -4080,7 +4619,7 @@ ], "support": { "issues": "https://github.com/Nyholm/psr7/issues", - "source": "https://github.com/Nyholm/psr7/tree/1.8.0" + "source": "https://github.com/Nyholm/psr7/tree/1.8.2" }, "funding": [ { @@ -4092,7 +4631,7 @@ "type": "github" } ], - "time": "2023-05-02T11:26:24+00:00" + "time": "2024-09-09T07:06:30+00:00" }, { "name": "opis/closure", @@ -4161,24 +4700,24 @@ }, { "name": "paragonie/constant_time_encoding", - "version": "v2.6.3", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "58c3f47f650c94ec05a151692652a868995d2938" + "reference": "df1e7fde177501eee2037dd159cf04f5f301a512" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938", - "reference": "58c3f47f650c94ec05a151692652a868995d2938", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512", + "reference": "df1e7fde177501eee2037dd159cf04f5f301a512", "shasum": "" }, "require": { - "php": "^7|^8" + "php": "^8" }, "require-dev": { - "phpunit/phpunit": "^6|^7|^8|^9", - "vimeo/psalm": "^1|^2|^3|^4" + "phpunit/phpunit": "^9", + "vimeo/psalm": "^4|^5" }, "type": "library", "autoload": { @@ -4224,7 +4763,7 @@ "issues": "https://github.com/paragonie/constant_time_encoding/issues", "source": "https://github.com/paragonie/constant_time_encoding" }, - "time": "2022-06-14T06:56:20+00:00" + "time": "2024-05-08T12:36:18+00:00" }, { "name": "paragonie/random_compat", @@ -4278,23 +4817,23 @@ }, { "name": "phenx/php-font-lib", - "version": "0.5.4", + "version": "0.5.6", "source": { "type": "git", "url": "https://github.com/dompdf/php-font-lib.git", - "reference": "dd448ad1ce34c63d09baccd05415e361300c35b4" + "reference": "a1681e9793040740a405ac5b189275059e2a9863" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/dd448ad1ce34c63d09baccd05415e361300c35b4", - "reference": "dd448ad1ce34c63d09baccd05415e361300c35b4", + "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/a1681e9793040740a405ac5b189275059e2a9863", + "reference": "a1681e9793040740a405ac5b189275059e2a9863", "shasum": "" }, "require": { "ext-mbstring": "*" }, "require-dev": { - "symfony/phpunit-bridge": "^3 || ^4 || ^5" + "symfony/phpunit-bridge": "^3 || ^4 || ^5 || ^6" }, "type": "library", "autoload": { @@ -4304,7 +4843,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-3.0" + "LGPL-2.1-or-later" ], "authors": [ { @@ -4316,22 +4855,22 @@ "homepage": "https://github.com/PhenX/php-font-lib", "support": { "issues": "https://github.com/dompdf/php-font-lib/issues", - "source": "https://github.com/dompdf/php-font-lib/tree/0.5.4" + "source": "https://github.com/dompdf/php-font-lib/tree/0.5.6" }, - "time": "2021-12-17T19:44:54+00:00" + "time": "2024-01-29T14:45:26+00:00" }, { "name": "phenx/php-svg-lib", - "version": "0.5.0", + "version": "0.5.4", "source": { "type": "git", "url": "https://github.com/dompdf/php-svg-lib.git", - "reference": "76876c6cf3080bcb6f249d7d59705108166a6685" + "reference": "46b25da81613a9cf43c83b2a8c2c1bdab27df691" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/76876c6cf3080bcb6f249d7d59705108166a6685", - "reference": "76876c6cf3080bcb6f249d7d59705108166a6685", + "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/46b25da81613a9cf43c83b2a8c2c1bdab27df691", + "reference": "46b25da81613a9cf43c83b2a8c2c1bdab27df691", "shasum": "" }, "require": { @@ -4350,7 +4889,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-3.0" + "LGPL-3.0-or-later" ], "authors": [ { @@ -4362,25 +4901,26 @@ "homepage": "https://github.com/PhenX/php-svg-lib", "support": { "issues": "https://github.com/dompdf/php-svg-lib/issues", - "source": "https://github.com/dompdf/php-svg-lib/tree/0.5.0" + "source": "https://github.com/dompdf/php-svg-lib/tree/0.5.4" }, - "time": "2022-09-06T12:16:56+00:00" + "time": "2024-04-08T12:52:34+00:00" }, { "name": "phpoffice/phpspreadsheet", - "version": "1.25.2", + "version": "1.29.10", "source": { "type": "git", "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "a317a09e7def49852400a4b3eca4a4b0790ceeb5" + "reference": "c80041b1628c4f18030407134fe88303661d4e4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/a317a09e7def49852400a4b3eca4a4b0790ceeb5", - "reference": "a317a09e7def49852400a4b3eca4a4b0790ceeb5", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/c80041b1628c4f18030407134fe88303661d4e4e", + "reference": "c80041b1628c4f18030407134fe88303661d4e4e", "shasum": "" }, "require": { + "composer/pcre": "^1||^2||^3", "ext-ctype": "*", "ext-dom": "*", "ext-fileinfo": "*", @@ -4395,26 +4935,26 @@ "ext-zip": "*", "ext-zlib": "*", "ezyang/htmlpurifier": "^4.15", - "maennchen/zipstream-php": "^2.1", + "maennchen/zipstream-php": "^2.1 || ^3.0", "markbaker/complex": "^3.0", "markbaker/matrix": "^3.0", - "php": "^7.3 || ^8.0", + "php": "^7.4 || ^8.0", "psr/http-client": "^1.0", "psr/http-factory": "^1.0", "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "dev-master", - "dompdf/dompdf": "^1.0 || ^2.0", + "dealerdirect/phpcodesniffer-composer-installer": "dev-main", + "dompdf/dompdf": "^1.0 || ^2.0 || ^3.0", "friendsofphp/php-cs-fixer": "^3.2", - "mitoteam/jpgraph": "10.2.4", - "mpdf/mpdf": "8.1.1", + "mitoteam/jpgraph": "^10.3", + "mpdf/mpdf": "^8.1.1", "phpcompatibility/php-compatibility": "^9.3", "phpstan/phpstan": "^1.1", "phpstan/phpstan-phpunit": "^1.0", "phpunit/phpunit": "^8.5 || ^9.0", "squizlabs/php_codesniffer": "^3.7", - "tecnickcom/tcpdf": "6.5" + "tecnickcom/tcpdf": "^6.5" }, "suggest": { "dompdf/dompdf": "Option for rendering PDF with PDF Writer", @@ -4467,22 +5007,22 @@ ], "support": { "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", - "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.25.2" + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.29.10" }, - "time": "2022-09-25T17:21:01+00:00" + "time": "2025-02-08T02:56:14+00:00" }, { "name": "phpoption/phpoption", - "version": "1.9.1", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", "shasum": "" }, "require": { @@ -4490,13 +5030,13 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "extra": { "bamarni-bin": { "bin-links": true, - "forward-command": true + "forward-command": false }, "branch-alias": { "dev-master": "1.9-dev" @@ -4532,7 +5072,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" }, "funding": [ { @@ -4544,24 +5084,24 @@ "type": "tidelift" } ], - "time": "2023-02-25T19:38:58+00:00" + "time": "2024-07-20T21:41:07+00:00" }, { "name": "phpseclib/phpseclib", - "version": "3.0.21", + "version": "3.0.43", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "4580645d3fc05c189024eb3b834c6c1e4f0f30a1" + "reference": "709ec107af3cb2f385b9617be72af8cf62441d02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/4580645d3fc05c189024eb3b834c6c1e4f0f30a1", - "reference": "4580645d3fc05c189024eb3b834c6c1e4f0f30a1", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/709ec107af3cb2f385b9617be72af8cf62441d02", + "reference": "709ec107af3cb2f385b9617be72af8cf62441d02", "shasum": "" }, "require": { - "paragonie/constant_time_encoding": "^1|^2", + "paragonie/constant_time_encoding": "^1|^2|^3", "paragonie/random_compat": "^1.4|^2.0|^9.99.99", "php": ">=5.6.1" }, @@ -4638,7 +5178,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.21" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.43" }, "funding": [ { @@ -4654,24 +5194,24 @@ "type": "tidelift" } ], - "time": "2023-07-09T15:24:48+00:00" + "time": "2024-12-14T21:12:59+00:00" }, { "name": "psr/cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { @@ -4691,7 +5231,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for caching libraries", @@ -4701,9 +5241,9 @@ "psr-6" ], "support": { - "source": "https://github.com/php-fig/cache/tree/master" + "source": "https://github.com/php-fig/cache/tree/3.0.0" }, - "time": "2016-08-06T20:24:11+00:00" + "time": "2021-02-03T23:26:27+00:00" }, { "name": "psr/clock", @@ -4755,20 +5295,20 @@ }, { "name": "psr/container", - "version": "1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", "shasum": "" }, "require": { - "php": ">=7.2.0" + "php": ">=7.4.0" }, "type": "library", "autoload": { @@ -4797,9 +5337,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.1" + "source": "https://github.com/php-fig/container/tree/1.1.2" }, - "time": "2021-03-05T17:36:06+00:00" + "time": "2021-11-05T16:50:12+00:00" }, { "name": "psr/event-dispatcher", @@ -4853,16 +5393,16 @@ }, { "name": "psr/http-client", - "version": "1.0.2", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", "shasum": "" }, "require": { @@ -4899,26 +5439,26 @@ "psr-18" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/1.0.2" + "source": "https://github.com/php-fig/http-client" }, - "time": "2023-04-10T20:12:12+00:00" + "time": "2023-09-23T14:17:50+00:00" }, { "name": "psr/http-factory", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", + "php": ">=7.1", "psr/http-message": "^1.0 || ^2.0" }, "type": "library", @@ -4942,7 +5482,7 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -4954,22 +5494,22 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + "source": "https://github.com/php-fig/http-factory" }, - "time": "2023-04-10T20:10:41+00:00" + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", - "version": "1.1", + "version": "2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { @@ -4978,7 +5518,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4993,7 +5533,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -5007,36 +5547,36 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/1.1" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2023-04-04T09:50:52+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { "name": "psr/log", - "version": "1.1.4", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -5057,9 +5597,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/2.0.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2021-07-14T16:41:46+00:00" }, { "name": "psr/simple-cache", @@ -5114,25 +5654,25 @@ }, { "name": "psy/psysh", - "version": "v0.11.20", + "version": "v0.12.7", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "0fa27040553d1d280a67a4393194df5228afea5b" + "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/0fa27040553d1d280a67a4393194df5228afea5b", - "reference": "0fa27040553d1d280a67a4393194df5228afea5b", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", + "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", "shasum": "" }, "require": { "ext-json": "*", "ext-tokenizer": "*", - "nikic/php-parser": "^4.0 || ^3.1", - "php": "^8.0 || ^7.0.8", - "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" }, "conflict": { "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" @@ -5143,16 +5683,19 @@ "suggest": { "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." }, "bin": [ "bin/psysh" ], "type": "library", "extra": { + "bamarni-bin": { + "bin-links": false, + "forward-command": false + }, "branch-alias": { - "dev-main": "0.11.x-dev" + "dev-main": "0.12.x-dev" } }, "autoload": { @@ -5184,9 +5727,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.20" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.7" }, - "time": "2023-07-31T14:32:22+00:00" + "time": "2024-12-10T01:58:33+00:00" }, { "name": "ralouphie/getallheaders", @@ -5234,42 +5777,52 @@ }, { "name": "ramsey/collection", - "version": "1.2.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", - "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", "shasum": "" }, "require": { - "php": "^7.3 || ^8", - "symfony/polyfill-php81": "^1.23" + "php": "^8.1" }, "require-dev": { - "captainhook/captainhook": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "ergebnis/composer-normalize": "^2.6", - "fakerphp/faker": "^1.5", - "hamcrest/hamcrest-php": "^2", - "jangregor/phpstan-prophecy": "^0.8", - "mockery/mockery": "^1.3", + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.28.3", + "fakerphp/faker": "^1.21", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^1.0", + "mockery/mockery": "^1.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcsstandards/phpcsutils": "^1.0.0-rc1", "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1", - "phpstan/phpstan": "^0.12.32", - "phpstan/phpstan-mockery": "^0.12.5", - "phpstan/phpstan-phpunit": "^0.12.11", - "phpunit/phpunit": "^8.5 || ^9", - "psy/psysh": "^0.10.4", - "slevomat/coding-standard": "^6.3", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.4" + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18.4", + "ramsey/coding-standard": "^2.0.3", + "ramsey/conventional-commits": "^1.3", + "vimeo/psalm": "^5.4" }, "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, "autoload": { "psr-4": { "Ramsey\\Collection\\": "src/" @@ -5297,7 +5850,7 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.2.2" + "source": "https://github.com/ramsey/collection/tree/2.0.0" }, "funding": [ { @@ -5309,29 +5862,27 @@ "type": "tidelift" } ], - "time": "2021-10-10T03:01:02+00:00" + "time": "2022-12-31T21:50:55+00:00" }, { "name": "ramsey/uuid", - "version": "4.2.3", + "version": "4.7.6", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" + "reference": "91039bc1faa45ba123c4328958e620d382ec7088" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088", "shasum": "" }, "require": { - "brick/math": "^0.8 || ^0.9", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", "ext-json": "*", - "php": "^7.2 || ^8.0", - "ramsey/collection": "^1.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php80": "^1.14" + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" }, "replace": { "rhumsaa/uuid": "self.version" @@ -5343,24 +5894,23 @@ "doctrine/annotations": "^1.8", "ergebnis/composer-normalize": "^2.15", "mockery/mockery": "^1.3", - "moontoast/math": "^1.1", "paragonie/random-lib": "^2", "php-mock/php-mock": "^2.2", "php-mock/php-mock-mockery": "^1.3", "php-parallel-lint/php-parallel-lint": "^1.1", "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-mockery": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", "phpunit/phpunit": "^8.5 || ^9", - "slevomat/coding-standard": "^7.0", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", "squizlabs/php_codesniffer": "^3.5", "vimeo/psalm": "^4.9" }, "suggest": { "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-ctype": "Enables faster processing of character classification using ctype functions.", "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", @@ -5368,9 +5918,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "4.x-dev" - }, "captainhook": { "force-install": true } @@ -5395,7 +5942,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.2.3" + "source": "https://github.com/ramsey/uuid/tree/4.7.6" }, "funding": [ { @@ -5407,20 +5954,20 @@ "type": "tidelift" } ], - "time": "2021-09-25T23:10:38+00:00" + "time": "2024-04-27T21:32:50+00:00" }, { "name": "reliese/laravel", - "version": "v1.2.3", + "version": "v1.3.5", "source": { "type": "git", "url": "https://github.com/reliese/laravel.git", - "reference": "3e0d2e5054c6c4f815d72f22915b35e3ffe82858" + "reference": "2fc69cbd416ae762ae9791b5b58adcb66b7c5b6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reliese/laravel/zipball/3e0d2e5054c6c4f815d72f22915b35e3ffe82858", - "reference": "3e0d2e5054c6c4f815d72f22915b35e3ffe82858", + "url": "https://api.github.com/repos/reliese/laravel/zipball/2fc69cbd416ae762ae9791b5b58adcb66b7c5b6c", + "reference": "2fc69cbd416ae762ae9791b5b58adcb66b7c5b6c", "shasum": "" }, "require": { @@ -5470,7 +6017,7 @@ "issues": "https://github.com/reliese/laravel/issues", "source": "https://github.com/reliese/laravel" }, - "time": "2023-08-17T07:50:33+00:00" + "time": "2024-09-26T13:33:01+00:00" }, { "name": "rguedes/pdfmerger", @@ -5524,30 +6071,34 @@ }, { "name": "sabberworm/php-css-parser", - "version": "8.4.0", + "version": "v8.7.0", "source": { "type": "git", - "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", - "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30" + "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git", + "reference": "f414ff953002a9b18e3a116f5e462c56f21237cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/e41d2140031d533348b2192a83f02d8dd8a71d30", - "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30", + "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/f414ff953002a9b18e3a116f5e462c56f21237cf", + "reference": "f414ff953002a9b18e3a116f5e462c56f21237cf", "shasum": "" }, "require": { "ext-iconv": "*", - "php": ">=5.6.20" + "php": "^5.6.20 || ^7.0.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "require-dev": { - "codacy/coverage": "^1.4", - "phpunit/phpunit": "^4.8.36" + "phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.40" }, "suggest": { "ext-mbstring": "for parsing UTF-8 CSS" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "9.0.x-dev" + } + }, "autoload": { "psr-4": { "Sabberworm\\CSS\\": "src/" @@ -5560,6 +6111,14 @@ "authors": [ { "name": "Raphael Schweikert" + }, + { + "name": "Oliver Klee", + "email": "github@oliverklee.de" + }, + { + "name": "Jake Hotson", + "email": "jake.github@qzdesign.co.uk" } ], "description": "Parser for CSS Files written in PHP", @@ -5570,32 +6129,35 @@ "stylesheet" ], "support": { - "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", - "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.4.0" + "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues", + "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.7.0" }, - "time": "2021-12-11T13:40:54+00:00" + "time": "2024-10-27T17:38:32+00:00" }, { "name": "sabre/uri", - "version": "2.2.4", + "version": "2.3.4", "source": { "type": "git", "url": "https://github.com/sabre-io/uri.git", - "reference": "c0c9af9f7754e60a49ebd760e1708adc6d1510c0" + "reference": "b76524c22de90d80ca73143680a8e77b1266c291" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/uri/zipball/c0c9af9f7754e60a49ebd760e1708adc6d1510c0", - "reference": "c0c9af9f7754e60a49ebd760e1708adc6d1510c0", + "url": "https://api.github.com/repos/sabre-io/uri/zipball/b76524c22de90d80ca73143680a8e77b1266c291", + "reference": "b76524c22de90d80ca73143680a8e77b1266c291", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.19.3", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" + "friendsofphp/php-cs-fixer": "^3.63", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^1.12", + "phpstan/phpstan-phpunit": "^1.4", + "phpstan/phpstan-strict-rules": "^1.6", + "phpunit/phpunit": "^9.6" }, "type": "library", "autoload": { @@ -5630,20 +6192,20 @@ "issues": "https://github.com/sabre-io/uri/issues", "source": "https://github.com/fruux/sabre-uri" }, - "time": "2022-09-19T12:25:28+00:00" + "time": "2024-08-27T12:18:16+00:00" }, { "name": "sabre/xml", - "version": "2.2.6", + "version": "2.2.11", "source": { "type": "git", "url": "https://github.com/sabre-io/xml.git", - "reference": "9cde7cdab1e50893cc83b037b40cd47bfde42a2b" + "reference": "01a7927842abf3e10df3d9c2d9b0cc9d813a3fcc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/xml/zipball/9cde7cdab1e50893cc83b037b40cd47bfde42a2b", - "reference": "9cde7cdab1e50893cc83b037b40cd47bfde42a2b", + "url": "https://api.github.com/repos/sabre-io/xml/zipball/01a7927842abf3e10df3d9c2d9b0cc9d813a3fcc", + "reference": "01a7927842abf3e10df3d9c2d9b0cc9d813a3fcc", "shasum": "" }, "require": { @@ -5655,9 +6217,9 @@ "sabre/uri": ">=1.0,<3.0.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.17.1", + "friendsofphp/php-cs-fixer": "~2.17.1||3.63.2", "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6" }, "type": "library", "autoload": { @@ -5699,7 +6261,7 @@ "issues": "https://github.com/sabre-io/xml/issues", "source": "https://github.com/fruux/sabre-xml" }, - "time": "2023-06-28T12:56:05+00:00" + "time": "2024-09-06T07:37:46+00:00" }, { "name": "setasign/fpdf", @@ -5749,31 +6311,31 @@ }, { "name": "setasign/fpdi", - "version": "v2.4.1", + "version": "v2.6.3", "source": { "type": "git", "url": "https://github.com/Setasign/FPDI.git", - "reference": "f4ba73e5bc053ccc90b81717c5df1cb2ea7bae7b" + "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Setasign/FPDI/zipball/f4ba73e5bc053ccc90b81717c5df1cb2ea7bae7b", - "reference": "f4ba73e5bc053ccc90b81717c5df1cb2ea7bae7b", + "url": "https://api.github.com/repos/Setasign/FPDI/zipball/67c31f5e50c93c20579ca9e23035d8c540b51941", + "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941", "shasum": "" }, "require": { "ext-zlib": "*", - "php": "^5.6 || ^7.0 || ^8.0" + "php": "^7.1 || ^8.0" }, "conflict": { "setasign/tfpdf": "<1.31" }, "require-dev": { - "phpunit/phpunit": "~5.7", - "setasign/fpdf": "~1.8", - "setasign/tfpdf": "~1.31", + "phpunit/phpunit": "^7", + "setasign/fpdf": "~1.8.6", + "setasign/tfpdf": "~1.33", "squizlabs/php_codesniffer": "^3.5", - "tecnickcom/tcpdf": "~6.2" + "tecnickcom/tcpdf": "^6.2" }, "suggest": { "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured." @@ -5809,7 +6371,7 @@ ], "support": { "issues": "https://github.com/Setasign/FPDI/issues", - "source": "https://github.com/Setasign/FPDI/tree/v2.4.1" + "source": "https://github.com/Setasign/FPDI/tree/v2.6.3" }, "funding": [ { @@ -5817,7 +6379,7 @@ "type": "tidelift" } ], - "time": "2023-07-27T08:12:09+00:00" + "time": "2025-02-05T13:22:35+00:00" }, { "name": "swiftmailer/swiftmailer", @@ -5897,16 +6459,16 @@ }, { "name": "symfony/console", - "version": "v5.4.28", + "version": "v5.4.47", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "f4f71842f24c2023b91237c72a365306f3c58827" + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/f4f71842f24c2023b91237c72a365306f3c58827", - "reference": "f4f71842f24c2023b91237c72a365306f3c58827", + "url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", "shasum": "" }, "require": { @@ -5976,7 +6538,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.28" + "source": "https://github.com/symfony/console/tree/v5.4.47" }, "funding": [ { @@ -5992,25 +6554,24 @@ "type": "tidelift" } ], - "time": "2023-08-07T06:12:30+00:00" + "time": "2024-11-06T11:30:55+00:00" }, { "name": "symfony/css-selector", - "version": "v5.4.26", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "0ad3f7e9a1ab492c5b4214cf22a9dc55dcf8600a" + "reference": "cb23e97813c5837a041b73a6d63a9ddff0778f5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/0ad3f7e9a1ab492c5b4214cf22a9dc55dcf8600a", - "reference": "0ad3f7e9a1ab492c5b4214cf22a9dc55dcf8600a", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/cb23e97813c5837a041b73a6d63a9ddff0778f5e", + "reference": "cb23e97813c5837a041b73a6d63a9ddff0778f5e", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -6042,7 +6603,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.4.26" + "source": "https://github.com/symfony/css-selector/tree/v6.4.13" }, "funding": [ { @@ -6058,33 +6619,33 @@ "type": "tidelift" } ], - "time": "2023-07-07T06:10:25+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.2", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" } }, "autoload": { @@ -6109,7 +6670,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -6125,20 +6686,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/error-handler", - "version": "v5.4.26", + "version": "v5.4.46", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "b26719213a39c9ba57520cbc5e52bfcc5e8d92f9" + "reference": "d19ede7a2cafb386be9486c580649d0f9e3d0363" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/b26719213a39c9ba57520cbc5e52bfcc5e8d92f9", - "reference": "b26719213a39c9ba57520cbc5e52bfcc5e8d92f9", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/d19ede7a2cafb386be9486c580649d0f9e3d0363", + "reference": "d19ede7a2cafb386be9486c580649d0f9e3d0363", "shasum": "" }, "require": { @@ -6180,7 +6741,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.4.26" + "source": "https://github.com/symfony/error-handler/tree/v5.4.46" }, "funding": [ { @@ -6196,48 +6757,43 @@ "type": "tidelift" } ], - "time": "2023-07-16T16:48:57+00:00" + "time": "2024-11-05T14:17:06+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.26", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "5dcc00e03413f05c1e7900090927bb7247cb0aac" + "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/5dcc00e03413f05c1e7900090927bb7247cb0aac", - "reference": "5dcc00e03413f05c1e7900090927bb7247cb0aac", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e", + "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^2|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -6265,7 +6821,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.26" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.13" }, "funding": [ { @@ -6281,37 +6837,34 @@ "type": "tidelift" } ], - "time": "2023-07-06T06:34:20+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.2", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" } }, "autoload": { @@ -6344,7 +6897,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" }, "funding": [ { @@ -6360,20 +6913,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/finder", - "version": "v5.4.27", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d" + "reference": "63741784cd7b9967975eec610b256eed3ede022b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ff4bce3c33451e7ec778070e45bd23f74214cd5d", - "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d", + "url": "https://api.github.com/repos/symfony/finder/zipball/63741784cd7b9967975eec610b256eed3ede022b", + "reference": "63741784cd7b9967975eec610b256eed3ede022b", "shasum": "" }, "require": { @@ -6407,7 +6960,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.27" + "source": "https://github.com/symfony/finder/tree/v5.4.45" }, "funding": [ { @@ -6423,20 +6976,20 @@ "type": "tidelift" } ], - "time": "2023-07-31T08:02:31+00:00" + "time": "2024-09-28T13:32:08+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.4.28", + "version": "v5.4.48", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "365992c83a836dfe635f1e903ccca43ee03d3dd2" + "reference": "3f38b8af283b830e1363acd79e5bc3412d055341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/365992c83a836dfe635f1e903ccca43ee03d3dd2", - "reference": "365992c83a836dfe635f1e903ccca43ee03d3dd2", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3f38b8af283b830e1363acd79e5bc3412d055341", + "reference": "3f38b8af283b830e1363acd79e5bc3412d055341", "shasum": "" }, "require": { @@ -6446,7 +6999,7 @@ "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "predis/predis": "~1.0", + "predis/predis": "^1.0|^2.0", "symfony/cache": "^4.4|^5.0|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^4.4|^5.0|^6.0", @@ -6483,7 +7036,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.28" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.48" }, "funding": [ { @@ -6499,20 +7052,20 @@ "type": "tidelift" } ], - "time": "2023-08-21T07:23:18+00:00" + "time": "2024-11-13T18:58:02+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.4.28", + "version": "v5.4.48", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "127a2322ca1828157901092518b8ea8e4e1109d4" + "reference": "c2dbfc92b851404567160d1ecf3fb7d9b7bde9b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/127a2322ca1828157901092518b8ea8e4e1109d4", - "reference": "127a2322ca1828157901092518b8ea8e4e1109d4", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/c2dbfc92b851404567160d1ecf3fb7d9b7bde9b0", + "reference": "c2dbfc92b851404567160d1ecf3fb7d9b7bde9b0", "shasum": "" }, "require": { @@ -6561,6 +7114,7 @@ "symfony/stopwatch": "^4.4|^5.0|^6.0", "symfony/translation": "^4.4|^5.0|^6.0", "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/var-dumper": "^4.4.31|^5.4", "twig/twig": "^2.13|^3.0.4" }, "suggest": { @@ -6595,7 +7149,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.4.28" + "source": "https://github.com/symfony/http-kernel/tree/v5.4.48" }, "funding": [ { @@ -6611,20 +7165,20 @@ "type": "tidelift" } ], - "time": "2023-08-26T13:47:51+00:00" + "time": "2024-11-27T12:43:17+00:00" }, { "name": "symfony/mime", - "version": "v5.4.26", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "2ea06dfeee20000a319d8407cea1d47533d5a9d2" + "reference": "8c1b9b3e5b52981551fc6044539af1d974e39064" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/2ea06dfeee20000a319d8407cea1d47533d5a9d2", - "reference": "2ea06dfeee20000a319d8407cea1d47533d5a9d2", + "url": "https://api.github.com/repos/symfony/mime/zipball/8c1b9b3e5b52981551fc6044539af1d974e39064", + "reference": "8c1b9b3e5b52981551fc6044539af1d974e39064", "shasum": "" }, "require": { @@ -6639,15 +7193,16 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<4.4", - "symfony/serializer": "<5.4.26|>=6,<6.2.13|>=6.3,<6.3.2" + "symfony/serializer": "<5.4.35|>=6,<6.3.12|>=6.4,<6.4.3" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/process": "^5.4|^6.4", "symfony/property-access": "^4.4|^5.1|^6.0", "symfony/property-info": "^4.4|^5.1|^6.0", - "symfony/serializer": "^5.4.26|~6.2.13|^6.3.2" + "symfony/serializer": "^5.4.35|~6.3.12|^6.4.3" }, "type": "library", "autoload": { @@ -6679,7 +7234,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.26" + "source": "https://github.com/symfony/mime/tree/v5.4.45" }, "funding": [ { @@ -6695,24 +7250,24 @@ "type": "tidelift" } ], - "time": "2023-07-27T06:29:31+00:00" + "time": "2024-10-23T20:18:32+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.28.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -6722,12 +7277,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6761,7 +7313,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -6777,24 +7329,24 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.28.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "6de50471469b8c9afc38164452ab2b6170ee71c1" + "reference": "48becf00c920479ca2e910c22a5a39e5d47ca956" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/6de50471469b8c9afc38164452ab2b6170ee71c1", - "reference": "6de50471469b8c9afc38164452ab2b6170ee71c1", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/48becf00c920479ca2e910c22a5a39e5d47ca956", + "reference": "48becf00c920479ca2e910c22a5a39e5d47ca956", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-iconv": "*" @@ -6804,12 +7356,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6844,7 +7393,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.31.0" }, "funding": [ { @@ -6860,36 +7409,33 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.28.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6925,7 +7471,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -6941,38 +7487,34 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.28.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -7012,7 +7554,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" }, "funding": [ { @@ -7028,36 +7570,33 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:30:37+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.28.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -7096,7 +7635,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -7112,24 +7651,24 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.28.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -7139,12 +7678,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -7179,7 +7715,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -7195,109 +7731,30 @@ "type": "tidelift" } ], - "time": "2023-07-28T09:04:16+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.28.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5" + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fe2f306d1d9d346a7fee353d0d5012e401e984b5", - "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -7334,7 +7791,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0" }, "funding": [ { @@ -7350,33 +7807,30 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.28.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -7417,7 +7871,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -7433,99 +7887,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/process", - "version": "v5.4.28", + "version": "v5.4.47", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "45261e1fccad1b5447a8d7a8e67aa7b4a9798b7b" + "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/45261e1fccad1b5447a8d7a8e67aa7b4a9798b7b", - "reference": "45261e1fccad1b5447a8d7a8e67aa7b4a9798b7b", + "url": "https://api.github.com/repos/symfony/process/zipball/5d1662fb32ebc94f17ddb8d635454a776066733d", + "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d", "shasum": "" }, "require": { @@ -7558,7 +7933,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.28" + "source": "https://github.com/symfony/process/tree/v5.4.47" }, "funding": [ { @@ -7574,7 +7949,7 @@ "type": "tidelift" } ], - "time": "2023-08-07T10:36:04+00:00" + "time": "2024-11-06T11:36:42+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -7667,16 +8042,16 @@ }, { "name": "symfony/routing", - "version": "v5.4.26", + "version": "v5.4.48", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "853fc7df96befc468692de0a48831b38f04d2cb2" + "reference": "dd08c19879a9b37ff14fd30dcbdf99a4cf045db1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/853fc7df96befc468692de0a48831b38f04d2cb2", - "reference": "853fc7df96befc468692de0a48831b38f04d2cb2", + "url": "https://api.github.com/repos/symfony/routing/zipball/dd08c19879a9b37ff14fd30dcbdf99a4cf045db1", + "reference": "dd08c19879a9b37ff14fd30dcbdf99a4cf045db1", "shasum": "" }, "require": { @@ -7737,7 +8112,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.4.26" + "source": "https://github.com/symfony/routing/tree/v5.4.48" }, "funding": [ { @@ -7753,47 +8128,47 @@ "type": "tidelift" } ], - "time": "2023-07-24T13:28:37+00:00" + "time": "2024-11-12T18:20:21+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.2", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "ext-psr": "<1.1|>=2" }, - "suggest": { - "symfony/service-implementation": "" - }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" } }, "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7820,7 +8195,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -7836,38 +8211,38 @@ "type": "tidelift" } ], - "time": "2022-05-30T19:17:29+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/string", - "version": "v5.4.26", + "version": "v6.4.15", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "1181fe9270e373537475e826873b5867b863883c" + "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/1181fe9270e373537475e826873b5867b863883c", - "reference": "1181fe9270e373537475e826873b5867b863883c", + "url": "https://api.github.com/repos/symfony/string/zipball/73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", + "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": ">=3.0" + "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -7906,7 +8281,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.26" + "source": "https://github.com/symfony/string/tree/v6.4.15" }, "funding": [ { @@ -7922,57 +8297,55 @@ "type": "tidelift" } ], - "time": "2023-06-28T12:46:07+00:00" + "time": "2024-11-13T13:31:12+00:00" }, { "name": "symfony/translation", - "version": "v5.4.24", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "de237e59c5833422342be67402d487fbf50334ff" + "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/de237e59c5833422342be67402d487fbf50334ff", - "reference": "de237e59c5833422342be67402d487fbf50334ff", + "url": "https://api.github.com/repos/symfony/translation/zipball/bee9bfabfa8b4045a66bf82520e492cddbaffa66", + "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation-contracts": "^2.3" + "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { - "symfony/config": "<4.4", - "symfony/console": "<5.3", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" }, "provide": { - "symfony/translation-implementation": "2.3" + "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { + "nikic/php-parser": "^4.18|^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-client-contracts": "^1.1|^2.0|^3.0", - "symfony/http-kernel": "^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/service-contracts": "^1.1.2|^2|^3", - "symfony/yaml": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -8003,7 +8376,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.4.24" + "source": "https://github.com/symfony/translation/tree/v6.4.13" }, "funding": [ { @@ -8019,42 +8392,42 @@ "type": "tidelift" } ], - "time": "2023-05-19T12:34:17+00:00" + "time": "2024-09-27T18:14:25+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.5.2", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe" + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/136b19dd05cdf0709db6537d058bcab6dd6e2dbe", - "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", "shasum": "" }, "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/translation-implementation": "" + "php": ">=8.1" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" } }, "autoload": { "psr-4": { "Symfony\\Contracts\\Translation\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8081,7 +8454,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" }, "funding": [ { @@ -8097,20 +8470,20 @@ "type": "tidelift" } ], - "time": "2022-06-27T16:58:25+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.4.28", + "version": "v5.4.48", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "684b36ff415e1381d4a943c3ca2502cd2debad73" + "reference": "42f18f170aa86d612c3559cfb3bd11a375df32c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/684b36ff415e1381d4a943c3ca2502cd2debad73", - "reference": "684b36ff415e1381d4a943c3ca2502cd2debad73", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/42f18f170aa86d612c3559cfb3bd11a375df32c8", + "reference": "42f18f170aa86d612c3559cfb3bd11a375df32c8", "shasum": "" }, "require": { @@ -8170,7 +8543,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.28" + "source": "https://github.com/symfony/var-dumper/tree/v5.4.48" }, "funding": [ { @@ -8186,35 +8559,37 @@ "type": "tidelift" } ], - "time": "2023-08-24T13:38:36+00:00" + "time": "2024-11-08T15:21:10+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.6", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" + "reference": "0d72ac1c00084279c1816675284073c5a337c20d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", - "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d", + "reference": "0d72ac1c00084279c1816675284073c5a337c20d", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + "php": "^7.4 || ^8.0", + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5.10" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -8237,9 +8612,9 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0" }, - "time": "2023-01-03T09:29:04+00:00" + "time": "2024-12-21T16:25:41+00:00" }, { "name": "vitalybaev/google-merchant-feed", @@ -8289,31 +8664,31 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.5.0", + "version": "v5.6.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.2", - "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.8", - "symfony/polyfill-ctype": "^1.23", - "symfony/polyfill-mbstring": "^1.23.1", - "symfony/polyfill-php80": "^1.23.1" + "graham-campbell/result-type": "^1.1.3", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "suggest": { "ext-filter": "Required to use the boolean validator." @@ -8322,10 +8697,10 @@ "extra": { "bamarni-bin": { "bin-links": true, - "forward-command": true + "forward-command": false }, "branch-alias": { - "dev-master": "5.5-dev" + "dev-master": "5.6-dev" } }, "autoload": { @@ -8357,7 +8732,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" }, "funding": [ { @@ -8369,7 +8744,7 @@ "type": "tidelift" } ], - "time": "2022-10-16T01:01:54+00:00" + "time": "2024-07-20T21:52:34+00:00" }, { "name": "voku/portable-ascii", @@ -8536,16 +8911,16 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "9.0-dev" - }, "laravel": { - "providers": [ - "Yajra\\DataTables\\DataTablesServiceProvider" - ], "aliases": { "DataTables": "Yajra\\DataTables\\Facades\\DataTables" - } + }, + "providers": [ + "Yajra\\DataTables\\DataTablesServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "9.0-dev" } }, "autoload": { @@ -8620,16 +8995,16 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.6-dev" - }, "laravel": { - "providers": [ - "Barryvdh\\Debugbar\\ServiceProvider" - ], "aliases": { "Debugbar": "Barryvdh\\Debugbar\\Facades\\Debugbar" - } + }, + "providers": [ + "Barryvdh\\Debugbar\\ServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "3.6-dev" } }, "autoload": { @@ -8676,16 +9051,16 @@ }, { "name": "barryvdh/laravel-ide-helper", - "version": "v2.13.0", + "version": "v2.14.0", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-ide-helper.git", - "reference": "81d5b223ff067a1f38e14c100997e153b837fe4a" + "reference": "485c756f6cff408d6b273274c5e86112c3973d98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/81d5b223ff067a1f38e14c100997e153b837fe4a", - "reference": "81d5b223ff067a1f38e14c100997e153b837fe4a", + "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/485c756f6cff408d6b273274c5e86112c3973d98", + "reference": "485c756f6cff408d6b273274c5e86112c3973d98", "shasum": "" }, "require": { @@ -8696,7 +9071,7 @@ "illuminate/console": "^8 || ^9 || ^10", "illuminate/filesystem": "^8 || ^9 || ^10", "illuminate/support": "^8 || ^9 || ^10", - "nikic/php-parser": "^4.7", + "nikic/php-parser": "^4.18 || ^5", "php": "^7.3 || ^8.0", "phpdocumentor/type-resolver": "^1.1.0" }, @@ -8709,20 +9084,20 @@ "orchestra/testbench": "^6 || ^7 || ^8", "phpunit/phpunit": "^8.5 || ^9", "spatie/phpunit-snapshot-assertions": "^3 || ^4", - "vimeo/psalm": "^3.12" + "vimeo/psalm": "^5.4" }, "suggest": { "illuminate/events": "Required for automatic helper generation (^6|^7|^8|^9|^10)." }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.12-dev" - }, "laravel": { "providers": [ "Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider" ] + }, + "branch-alias": { + "dev-master": "2.14-dev" } }, "autoload": { @@ -8754,7 +9129,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-ide-helper/issues", - "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v2.13.0" + "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v2.14.0" }, "funding": [ { @@ -8766,24 +9141,24 @@ "type": "github" } ], - "time": "2023-02-04T13:56:40+00:00" + "time": "2024-02-05T08:16:36+00:00" }, { "name": "barryvdh/reflection-docblock", - "version": "v2.1.1", + "version": "v2.3.1", "source": { "type": "git", "url": "https://github.com/barryvdh/ReflectionDocBlock.git", - "reference": "e6811e927f0ecc37cc4deaa6627033150343e597" + "reference": "b6ff9f93603561f50e53b64310495d20b8dff5d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/e6811e927f0ecc37cc4deaa6627033150343e597", - "reference": "e6811e927f0ecc37cc4deaa6627033150343e597", + "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/b6ff9f93603561f50e53b64310495d20b8dff5d8", + "reference": "b6ff9f93603561f50e53b64310495d20b8dff5d8", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^8.5.14|^9" @@ -8795,7 +9170,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.3.x-dev" } }, "autoload": { @@ -8816,22 +9191,22 @@ } ], "support": { - "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.1.1" + "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.3.1" }, - "time": "2023-06-14T05:06:27+00:00" + "time": "2025-01-18T19:26:32+00:00" }, { "name": "composer/class-map-generator", - "version": "1.1.0", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/composer/class-map-generator.git", - "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9" + "reference": "ffe442c5974c44a9343e37a0abcb1cc37319f5b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/953cc4ea32e0c31f2185549c7d216d7921f03da9", - "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/ffe442c5974c44a9343e37a0abcb1cc37319f5b9", + "reference": "ffe442c5974c44a9343e37a0abcb1cc37319f5b9", "shasum": "" }, "require": { @@ -8840,12 +9215,12 @@ "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" }, "require-dev": { - "phpstan/phpstan": "^1.6", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/filesystem": "^5.4 || ^6", - "symfony/phpunit-bridge": "^5" + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-deprecation-rules": "^1 || ^2", + "phpstan/phpstan-phpunit": "^1 || ^2", + "phpstan/phpstan-strict-rules": "^1.1 || ^2", + "phpunit/phpunit": "^8", + "symfony/filesystem": "^5.4 || ^6" }, "type": "library", "extra": { @@ -8875,7 +9250,7 @@ ], "support": { "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.1.0" + "source": "https://github.com/composer/class-map-generator/tree/1.6.0" }, "funding": [ { @@ -8891,105 +9266,34 @@ "type": "tidelift" } ], - "time": "2023-06-30T13:58:57+00:00" - }, - { - "name": "composer/pcre", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "3fdb2807b31a78a40ad89570e30ec77466c98717" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/3fdb2807b31a78a40ad89570e30ec77466c98717", - "reference": "3fdb2807b31a78a40ad89570e30ec77466c98717", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/2.1.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-11-16T18:32:04+00:00" + "time": "2025-02-05T10:05:34+00:00" }, { "name": "doctrine/instantiator", - "version": "1.5.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^11", + "doctrine/coding-standard": "^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.30 || ^5.4" + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" }, "type": "library", "autoload": { @@ -9016,7 +9320,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" }, "funding": [ { @@ -9032,7 +9336,7 @@ "type": "tidelift" } ], - "time": "2022-12-30T00:15:36+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "facade/flare-client-php", @@ -9137,16 +9441,16 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, "laravel": { - "providers": [ - "Facade\\Ignition\\IgnitionServiceProvider" - ], "aliases": { "Flare": "Facade\\Ignition\\Facades\\Flare" - } + }, + "providers": [ + "Facade\\Ignition\\IgnitionServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "2.x-dev" } }, "autoload": { @@ -9232,20 +9536,20 @@ }, { "name": "fakerphp/faker", - "version": "v1.20.0", + "version": "v1.24.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b" + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/37f751c67a5372d4e26353bd9384bc03744ec77b", - "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0", + "php": "^7.4 || ^8.0", "psr/container": "^1.0 || ^2.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" }, @@ -9256,7 +9560,8 @@ "bamarni/composer-bin-plugin": "^1.4.1", "doctrine/persistence": "^1.3 || ^2.0", "ext-intl": "*", - "symfony/phpunit-bridge": "^4.4 || ^5.2" + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" }, "suggest": { "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", @@ -9266,11 +9571,6 @@ "ext-mbstring": "Required for multibyte Unicode string functionality." }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "v1.20-dev" - } - }, "autoload": { "psr-4": { "Faker\\": "src/Faker/" @@ -9293,32 +9593,32 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.20.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" }, - "time": "2022-07-20T13:12:54+00:00" + "time": "2024-11-21T13:46:39+00:00" }, { "name": "filp/whoops", - "version": "2.15.3", + "version": "2.17.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "c83e88a30524f9360b11f585f71e6b17313b7187" + "reference": "075bc0c26631110584175de6523ab3f1652eb28e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/c83e88a30524f9360b11f585f71e6b17313b7187", - "reference": "c83e88a30524f9360b11f585f71e6b17313b7187", + "url": "https://api.github.com/repos/filp/whoops/zipball/075bc0c26631110584175de6523ab3f1652eb28e", + "reference": "075bc0c26631110584175de6523ab3f1652eb28e", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0 || ^8.0", + "php": "^7.1 || ^8.0", "psr/log": "^1.0.1 || ^2.0 || ^3.0" }, "require-dev": { - "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" }, "suggest": { "symfony/var-dumper": "Pretty print complex values better with var-dumper available", @@ -9358,7 +9658,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.15.3" + "source": "https://github.com/filp/whoops/tree/2.17.0" }, "funding": [ { @@ -9366,7 +9666,7 @@ "type": "github" } ], - "time": "2023-07-13T12:00:00+00:00" + "time": "2025-01-25T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -9421,36 +9721,41 @@ }, { "name": "laravel/sail", - "version": "v1.19.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "4f230634a3163f3442def6a4e6ffdb02b02e14d6" + "reference": "e81a7bd7ac1a745ccb25572830fecf74a89bb48a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/4f230634a3163f3442def6a4e6ffdb02b02e14d6", - "reference": "4f230634a3163f3442def6a4e6ffdb02b02e14d6", + "url": "https://api.github.com/repos/laravel/sail/zipball/e81a7bd7ac1a745ccb25572830fecf74a89bb48a", + "reference": "e81a7bd7ac1a745ccb25572830fecf74a89bb48a", "shasum": "" }, "require": { "illuminate/console": "^8.0|^9.0|^10.0", "illuminate/contracts": "^8.0|^9.0|^10.0", "illuminate/support": "^8.0|^9.0|^10.0", - "php": "^7.3|^8.0" + "php": "^8.0", + "symfony/yaml": "^6.0" + }, + "require-dev": { + "orchestra/testbench": "^6.0|^7.0|^8.0", + "phpstan/phpstan": "^1.10" }, "bin": [ "bin/sail" ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - }, "laravel": { "providers": [ "Laravel\\Sail\\SailServiceProvider" ] + }, + "branch-alias": { + "dev-master": "1.x-dev" } }, "autoload": { @@ -9477,29 +9782,31 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2023-01-31T13:37:57+00:00" + "time": "2023-09-11T17:37:09+00:00" }, { "name": "maximebf/debugbar", - "version": "v1.18.2", + "version": "v1.23.6", "source": { "type": "git", - "url": "https://github.com/maximebf/php-debugbar.git", - "reference": "17dcf3f6ed112bb85a37cf13538fd8de49f5c274" + "url": "https://github.com/php-debugbar/php-debugbar.git", + "reference": "4b3d5f1afe09a7db5a9d3282890f49f6176d6542" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/17dcf3f6ed112bb85a37cf13538fd8de49f5c274", - "reference": "17dcf3f6ed112bb85a37cf13538fd8de49f5c274", + "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/4b3d5f1afe09a7db5a9d3282890f49f6176d6542", + "reference": "4b3d5f1afe09a7db5a9d3282890f49f6176d6542", "shasum": "" }, "require": { - "php": "^7.1|^8", + "php": "^7.2|^8", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^4|^5|^6" + "symfony/var-dumper": "^4|^5|^6|^7" }, "require-dev": { - "phpunit/phpunit": ">=7.5.20 <10.0", + "dbrekelmans/bdi": "^1", + "phpunit/phpunit": "^8|^9", + "symfony/panther": "^1|^2.1", "twig/twig": "^1.38|^2.7|^3.0" }, "suggest": { @@ -9510,7 +9817,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-master": "1.23-dev" } }, "autoload": { @@ -9540,23 +9847,23 @@ "debugbar" ], "support": { - "issues": "https://github.com/maximebf/php-debugbar/issues", - "source": "https://github.com/maximebf/php-debugbar/tree/v1.18.2" + "issues": "https://github.com/php-debugbar/php-debugbar/issues", + "source": "https://github.com/php-debugbar/php-debugbar/tree/v1.23.6" }, - "time": "2023-02-04T15:27:00+00:00" + "time": "2025-02-13T12:22:36+00:00" }, { "name": "mockery/mockery", - "version": "1.6.6", + "version": "1.6.12", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e" + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/b8e0bb7d8c604046539c1115994632c74dcb361e", - "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", "shasum": "" }, "require": { @@ -9568,10 +9875,8 @@ "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.10", - "psalm/plugin-phpunit": "^0.18.4", - "symplify/easy-coding-standard": "^11.5.0", - "vimeo/psalm": "^4.30" + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" }, "type": "library", "autoload": { @@ -9628,20 +9933,20 @@ "security": "https://github.com/mockery/mockery/security/advisories", "source": "https://github.com/mockery/mockery" }, - "time": "2023-08-09T00:03:52+00:00" + "time": "2024-05-16T03:13:13+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.1", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + "reference": "024473a478be9df5fdaca2c793f2232fe788e414" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414", + "reference": "024473a478be9df5fdaca2c793f2232fe788e414", "shasum": "" }, "require": { @@ -9649,11 +9954,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -9679,7 +9985,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0" }, "funding": [ { @@ -9687,7 +9993,7 @@ "type": "tidelift" } ], - "time": "2023-03-08T13:26:56+00:00" + "time": "2025-02-12T12:17:51+00:00" }, { "name": "nunomaduro/collision", @@ -9778,20 +10084,21 @@ }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -9832,9 +10139,15 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -9942,25 +10255,33 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.1", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.18|^2.0" }, "require-dev": { "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" }, "type": "library", "extra": { @@ -9986,41 +10307,88 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" }, - "time": "2022-03-15T21:29:03+00:00" + "time": "2024-11-09T15:12:26+00:00" }, { - "name": "phpunit/php-code-coverage", - "version": "9.2.28", + "name": "phpstan/phpdoc-parser", + "version": "2.1.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7134a5ccaaf0f1c92a4f5501a6c9f98ac4dcc0ef" + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7134a5ccaaf0f1c92a4f5501a6c9f98ac4dcc0ef", - "reference": "7134a5ccaaf0f1c92a4f5501a6c9f98ac4dcc0ef", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^5.3.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" + }, + "time": "2025-02-19T13:28:12+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.32", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^4.19.1 || ^5.1.0", "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.6" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -10029,7 +10397,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "9.2.x-dev" } }, "autoload": { @@ -10058,7 +10426,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.28" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" }, "funding": [ { @@ -10066,7 +10434,7 @@ "type": "github" } ], - "time": "2023-09-12T14:36:20+00:00" + "time": "2024-08-22T04:23:01+00:00" }, { "name": "phpunit/php-file-iterator", @@ -10311,45 +10679,45 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.12", + "version": "9.6.22", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a122c2ebd469b751d774aa0f613dc0d67697653f" + "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a122c2ebd469b751d774aa0f613dc0d67697653f", - "reference": "a122c2ebd469b751d774aa0f613dc0d67697653f", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f80235cb4d3caa59ae09be3adf1ded27521d1a9c", + "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1 || ^2", + "doctrine/instantiator": "^1.5.0 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", + "myclabs/deep-copy": "^1.12.1", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.28", - "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-code-coverage": "^9.2.32", + "phpunit/php-file-iterator": "^3.0.6", "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", + "phpunit/php-text-template": "^2.0.4", + "phpunit/php-timer": "^5.0.3", + "sebastian/cli-parser": "^1.0.2", + "sebastian/code-unit": "^1.0.8", "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", + "sebastian/diff": "^4.0.6", + "sebastian/environment": "^5.1.5", + "sebastian/exporter": "^4.0.6", + "sebastian/global-state": "^5.0.7", + "sebastian/object-enumerator": "^4.0.4", + "sebastian/resource-operations": "^3.0.4", + "sebastian/type": "^3.2.1", "sebastian/version": "^3.0.2" }, "suggest": { @@ -10394,7 +10762,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.12" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.22" }, "funding": [ { @@ -10410,20 +10778,20 @@ "type": "tidelift" } ], - "time": "2023-09-12T14:39:31+00:00" + "time": "2024-12-05T13:48:26+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", "shasum": "" }, "require": { @@ -10458,7 +10826,7 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" }, "funding": [ { @@ -10466,7 +10834,7 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-03-02T06:27:43+00:00" }, { "name": "sebastian/code-unit", @@ -10655,20 +11023,20 @@ }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -10700,7 +11068,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" }, "funding": [ { @@ -10708,20 +11076,20 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-12-22T06:19:30+00:00" }, { "name": "sebastian/diff", - "version": "4.0.5", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", "shasum": "" }, "require": { @@ -10766,7 +11134,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" }, "funding": [ { @@ -10774,7 +11142,7 @@ "type": "github" } ], - "time": "2023-05-07T05:35:17+00:00" + "time": "2024-03-02T06:30:58+00:00" }, { "name": "sebastian/environment", @@ -10841,16 +11209,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.5", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", "shasum": "" }, "require": { @@ -10906,7 +11274,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" }, "funding": [ { @@ -10914,20 +11282,20 @@ "type": "github" } ], - "time": "2022-09-14T06:03:37+00:00" + "time": "2024-03-02T06:33:00+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.6", + "version": "5.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bde739e7565280bda77be70044ac1047bc007e34" + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", - "reference": "bde739e7565280bda77be70044ac1047bc007e34", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", "shasum": "" }, "require": { @@ -10970,7 +11338,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" }, "funding": [ { @@ -10978,24 +11346,24 @@ "type": "github" } ], - "time": "2023-08-02T09:26:13+00:00" + "time": "2024-03-02T06:35:11+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -11027,7 +11395,7 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" }, "funding": [ { @@ -11035,7 +11403,7 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-12-22T06:20:34+00:00" }, { "name": "sebastian/object-enumerator", @@ -11214,16 +11582,16 @@ }, { "name": "sebastian/resource-operations", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", "shasum": "" }, "require": { @@ -11235,7 +11603,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -11256,8 +11624,7 @@ "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" }, "funding": [ { @@ -11265,7 +11632,7 @@ "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2024-03-14T16:00:52+00:00" }, { "name": "sebastian/type", @@ -11377,17 +11744,89 @@ "time": "2020-09-28T06:39:44+00:00" }, { - "name": "theseer/tokenizer", - "version": "1.2.1", + "name": "symfony/yaml", + "version": "v6.4.18", "source": { "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "url": "https://github.com/symfony/yaml.git", + "reference": "bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/symfony/yaml/zipball/bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5", + "reference": "bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0|^7.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v6.4.18" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-01-07T09:44:41+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -11416,7 +11855,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -11424,7 +11863,7 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2024-03-03T12:36:25+00:00" } ], "aliases": [], @@ -11433,8 +11872,8 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^7.3|^8.0" + "php": "^7.4|^8.0" }, "platform-dev": [], - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.2.0" } diff --git a/config/app.php b/config/app.php index a7b8065..b5f5638 100755 --- a/config/app.php +++ b/config/app.php @@ -51,7 +51,7 @@ return [ | your application so that it is used when running Artisan tasks. | */ - + 'mode' => env('APP_MODE', 'live'), 'url' => env('APP_URL', 'https://mivita'), 'domain' => env('APP_DOMAIN', 'mivita'), 'tld_care' => env('APP_TLD_CARE', '.local'), @@ -76,7 +76,7 @@ return [ 'main_tax_rate' => env('APP_MAIN_TAX_RATE', 19), 'shipping_tax' => env('APP_SHIPPING_TAX', 19), - 'php_version' => env('APP_PHP_VERSION', '7.4'), + 'php_version' => env('APP_PHP_VERSION', '8.2'), /* 'url_backend' => env('APP_URL', 'http://mivita.local/'), 'url_backend' => env('APP_URL', 'http://mivita.local/'), @@ -177,7 +177,7 @@ return [ Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, Reliese\Coders\CodersServiceProvider::class, - + Intervention\Image\ImageServiceProvider::class, /* * Package Service Providers... */ @@ -192,11 +192,9 @@ return [ // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, - Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class, Jenssegers\Date\DateServiceProvider::class, Collective\Html\HtmlServiceProvider::class, - Intervention\Image\ImageServiceProvider::class, Maatwebsite\Excel\ExcelServiceProvider::class, Yajra\DataTables\DataTablesServiceProvider::class, App\Providers\YardServiceProvider::class @@ -250,10 +248,10 @@ return [ 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, - 'Input' => Illuminate\Support\Facades\Input::class, + //'Input' => Illuminate\Support\Facades\Input::class, 'Form' => Collective\Html\FormFacade::class, 'HTML' => Collective\Html\HtmlFacade::class, - 'Image' => Intervention\Image\Facades\Image::class, + 'Image' => Intervention\Image\Facades\Image::class, 'Carbon' => Carbon\Carbon::class, 'Date' => Jenssegers\Date\Date::class, 'HTMLHelper' => App\Services\HTMLHelper::class, diff --git a/config/image.php b/config/image.php deleted file mode 100644 index 2b1d2c3..0000000 --- a/config/image.php +++ /dev/null @@ -1,20 +0,0 @@ - 'gd' - -]; diff --git a/cron_script_local.sh b/cron_script_local.sh index c519548..8829457 100644 --- a/cron_script_local.sh +++ b/cron_script_local.sh @@ -1,8 +1,10 @@ #!/bin/bash echo $(date) # Will print the output of date command /Applications/MAMP/bin/php/php7.4.33/bin/php -v -/Applications/MAMP/bin/php/php7.4.33/bin/php ../artisan business:store 0 0 2>&1 -/Applications/MAMP/bin/php/php7.4.33/bin/php ../artisan user:cleanup 2>&1 +# /Applications/MAMP/bin/php/php7.4.33/bin/php ../artisan business:store 0 0 2>&1 +# /Applications/MAMP/bin/php/php7.4.33/bin/php ../artisan user:cleanup 2>&1 +/Applications/MAMP/bin/php/php7.4.33/bin/php ../artisan user:make_abo_order 2>&1 + # php /path/to/artisan schedule:run 1>> /dev/null 2>&1 # cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1 \ No newline at end of file diff --git a/cron_script_server.sh b/cron_script_server.sh index 34ac6ee..8d66ac6 100644 --- a/cron_script_server.sh +++ b/cron_script_server.sh @@ -1,7 +1,8 @@ #!/bin/bash echo $(date) # Will print the output of date command -/usr/bin/php74 -v -/usr/bin/php74 ../artisan business:store 0 0 2>&1 -/usr/bin/php74 ../artisan user:cleanup 2>&1 +/usr/bin/php82 -v +/usr/bin/php82 ../artisan business:store 0 0 2>&1 +/usr/bin/php82 ../artisan user:cleanup 2>&1 +/usr/bin/php82 ../artisan user:make_abo_order 2>&1 # php /path/to/artisan schedule:run 1>> /dev/null 2>&1 # cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1 \ No newline at end of file diff --git a/database/migrations/2019_02_23_163832_create_shopping_payments_table.php b/database/migrations/2019_02_23_163832_create_shopping_payments_table.php index 16ff321..feb8150 100644 --- a/database/migrations/2019_02_23_163832_create_shopping_payments_table.php +++ b/database/migrations/2019_02_23_163832_create_shopping_payments_table.php @@ -21,7 +21,9 @@ class CreateShoppingPaymentsTable extends Migration $table->string('clearingtype',3); $table->string('wallettype', 3)->nullable(); $table->string('onlinebanktransfertype',3)->nullable(); + $table->string('pseudocardpan')->nullable(); + $table->string('reference', 16); $table->unsignedInteger('amount'); $table->string('currency', 6); @@ -31,6 +33,7 @@ class CreateShoppingPaymentsTable extends Migration $table->boolean('is_abo')->default(false); $table->unsignedTinyInteger('abo_interval')->nullable(); + $table->string('identifier')->nullable(); $table->char('mode', 4)->nullable(); diff --git a/database/migrations/2024_07_29_144455_create_user_abos_table.php b/database/migrations/2024_07_29_144455_create_user_abos_table.php index 7512c0f..848e23e 100644 --- a/database/migrations/2024_07_29_144455_create_user_abos_table.php +++ b/database/migrations/2024_07_29_144455_create_user_abos_table.php @@ -16,15 +16,18 @@ class CreateUserAbosTable extends Migration Schema::create('user_abos', function (Blueprint $table) { $table->increments('id'); $table->unsignedInteger('user_id')->nullable(); + $table->unsignedInteger('member_id')->nullable(); + $table->unsignedInteger('shopping_user_id'); $table->char('is_for', 2)->nullable(); + $table->string('email')->nullable(); $table->unsignedInteger('payone_userid'); $table->string('clearingtype',3); $table->string('wallettype', 3)->nullable(); - $table->unsignedInteger('amount'); - $table->string('currency', 6); - + $table->string('carddata')->nullable(); + + $table->decimal('amount', 13, 2)->default(0.00); $table->boolean('active')->default(true); $table->unsignedTinyInteger('status')->index()->default(0); @@ -34,9 +37,6 @@ class CreateUserAbosTable extends Migration $table->date('next_date')->nullable(); $table->date('cancel_date')->nullable(); - $table->unsignedTinyInteger('count')->default(0); - - $table->timestamps(); $table->softDeletes(); $table->timestamp('user_deleted_at')->nullable(); @@ -45,6 +45,10 @@ class CreateUserAbosTable extends Migration ->references('id') ->on('users'); + $table->foreign('member_id') + ->references('id') + ->on('users'); + $table->foreign('shopping_user_id') ->references('id') ->on('shopping_users'); diff --git a/database/migrations/2024_10_17_161306_create_user_abo_items_table.php b/database/migrations/2024_10_17_161306_create_user_abo_items_table.php new file mode 100644 index 0000000..d006229 --- /dev/null +++ b/database/migrations/2024_10_17_161306_create_user_abo_items_table.php @@ -0,0 +1,49 @@ +increments('id'); + $table->unsignedInteger('user_abo_id'); + $table->unsignedInteger('product_id'); + $table->unsignedTinyInteger('comp')->nullable(); + $table->unsignedInteger('qty'); + + $table->unsignedTinyInteger('status')->index()->default(0); + $table->timestamps(); + + $table->foreign('user_abo_id') + ->references('id') + ->on('user_abos') + ->onDelete('cascade'); + + $table->foreign('product_id') + ->references('id') + ->on('products'); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_abo_items'); + } +} diff --git a/mivita.code-workspace b/mivita.code-workspace index 876a149..29881eb 100644 --- a/mivita.code-workspace +++ b/mivita.code-workspace @@ -4,5 +4,7 @@ "path": "." } ], - "settings": {} + "settings": { + "CodeGPT.apiKey": "CodeGPT Plus Beta" + } } \ No newline at end of file diff --git a/packages/shoppingcart/.gitignore b/packages/shoppingcart/.gitignore deleted file mode 100644 index 225319b..0000000 --- a/packages/shoppingcart/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -/vendor -composer.phar -composer.lock -.DS_Store -.idea/ \ No newline at end of file diff --git a/packages/shoppingcart/.travis.yml b/packages/shoppingcart/.travis.yml deleted file mode 100644 index 51c3700..0000000 --- a/packages/shoppingcart/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: php - -php: - - 7.0 - -before_script: - - composer self-update - - composer install --prefer-source --no-interaction - -script: vendor/bin/phpunit \ No newline at end of file diff --git a/packages/shoppingcart/CanBeBought.php b/packages/shoppingcart/CanBeBought.php deleted file mode 100644 index 75b2729..0000000 --- a/packages/shoppingcart/CanBeBought.php +++ /dev/null @@ -1,43 +0,0 @@ -getKey() : $this->id; - } - - /** - * Get the description or title of the Buyable item. - * - * @return string - */ - public function getBuyableDescription($options = null) - { - if(property_exists($this, 'name')) return $this->name; - if(property_exists($this, 'title')) return $this->title; - if(property_exists($this, 'description')) return $this->description; - - return null; - } - - /** - * Get the price of the Buyable item. - * - * @return float - */ - public function getBuyablePrice($options = null) - { - if(property_exists($this, 'price')) return $this->price; - - return null; - } -} \ No newline at end of file diff --git a/packages/shoppingcart/Cart.php b/packages/shoppingcart/Cart.php deleted file mode 100644 index eaaf942..0000000 --- a/packages/shoppingcart/Cart.php +++ /dev/null @@ -1,686 +0,0 @@ -session = $session; - $this->events = $events; - $this->extraCosts = new Collection(); - - $this->instance(self::DEFAULT_INSTANCE); - } - - /** - * Set the current cart instance. - * - * @param string|null $instance - * @return Cart - */ - public function instance($instance = null) - { - $instance = $instance ?: self::DEFAULT_INSTANCE; - - $this->instance = sprintf('%s.%s', 'cart', $instance); - - return $this; - } - - /** - * Get the current cart instance. - * - * @return string - */ - public function currentInstance() - { - return str_replace('cart.', '', $this->instance); - } - - /** - * Add an item to the cart. - * - * @param mixed $id - * @param mixed $name - * @param int|float $qty - * @param float $price - * @param array $options - * @return CartItem - */ - public function add($id, $name = null, $qty = null, $price = null, array $options = []) - { - if ($this->isMulti($id)) { - return array_map(function ($item) { - return $this->add($item); - }, $id); - } - - $cartItem = $this->createCartItem($id, $name, $qty, $price, $options); - - $content = $this->getContent(); - - if ($content->has($cartItem->rowId)) { - $cartItem->qty += $content->get($cartItem->rowId)->qty; - } - - $content->put($cartItem->rowId, $cartItem); - - $this->events->dispatch('cart.added', $cartItem); - - $this->session->put($this->instance, $content); - - return $cartItem; - } - - /** - * Sets/adds an additional cost on the cart. - * - * @param string $name - * @param float $price - * @todo add in session - */ - public function addCost($name, $price) - { - $oldCost = $this->extraCosts->pull($name, 0); - - $this->extraCosts->put($name, $price + $oldCost); - } - - /** - * Gets an additional cost by name - * - * @param $name - * @param int|null $decimals - * @param string|null $decimalPoint - * @param string|null $thousandSeparator - * @return string - */ - public function getCost($name) - { - $cost = $this->extraCosts->get($name, 0); - - return $this->numberFormat($cost); - } - - /** - * Update the cart item with the given rowId. - * - * @param string $rowId - * @param mixed $qty - * @return CartItem - */ - public function update($rowId, $qty) - { - $cartItem = $this->get($rowId); - - if ($qty instanceof Buyable) { - $cartItem->updateFromBuyable($qty); - } elseif (is_array($qty)) { - $cartItem->updateFromArray($qty); - } else { - $cartItem->qty = $qty; - } - - $content = $this->getContent(); - - if ($rowId !== $cartItem->rowId) { - $content->pull($rowId); - - if ($content->has($cartItem->rowId)) { - $existingCartItem = $this->get($cartItem->rowId); - $cartItem->setQuantity($existingCartItem->qty + $cartItem->qty); - } - } - - if ($cartItem->qty <= 0) { - $this->remove($cartItem->rowId); - return; - } else { - $content->put($cartItem->rowId, $cartItem); - } - - $this->events->dispatch('cart.updated', $cartItem); - - $this->session->put($this->instance, $content); - - return $cartItem; - } - - /** - * Remove the cart item with the given rowId from the cart. - * - * @param string $rowId - * @return void - */ - public function remove($rowId) - { - $cartItem = $this->get($rowId); - - $content = $this->getContent(); - - $content->pull($cartItem->rowId); - - $this->events->dispatch('cart.removed', $cartItem); - - $this->session->put($this->instance, $content); - } - - /** - * Get a cart item from the cart by its rowId. - * - * @param string $rowId - * @return CartItem - */ - public function get($rowId) - { - $content = $this->getContent(); - - if ( ! $content->has($rowId)) - throw new InvalidRowIDException("The cart does not contain rowId {$rowId}."); - - return $content->get($rowId); - } - - /** - * Destroy the current cart instance. - * - * @return void - */ - public function destroy() - { - $this->session->remove($this->instance); - } - - /** - * Get the content of the cart. - * - * @return Collection - */ - public function content() - { - if (is_null($this->session->get($this->instance))) { - return new Collection(); - } - - return $this->session->get($this->instance); - } - - /** - * Get the number of items in the cart. - * - * @return int|float - */ - public function count() - { - $content = $this->getContent(); - - return $content->sum('qty'); - } - - /** - * Get the total price of the items in the cart. - * - * @param int $decimals - * @param string $decimalPoint - * @param string $thousandSeparator - * @return string - */ - public function total() - { - $content = $this->getContent(); - - $total = $content->reduce(function ($total, CartItem $cartItem) { - return $total + ($cartItem->qty * $cartItem->priceTax); - }, 0); - - $totalCost = $this->extraCosts->reduce(function ($total, $cost) { - return $total + $cost; - }, 0); - - $total += $totalCost; - - return $this->numberFormat($total); - } - - /** - * Get the total tax of the items in the cart. - * - * @param int $decimals - * @param string $decimalPoint - * @param string $thousandSeparator - * @return float - */ - public function tax() - { - $content = $this->getContent(); - - $tax = $content->reduce(function ($tax, CartItem $cartItem) { - return $tax + ($cartItem->qty * $cartItem->tax); - }, 0); - - return $this->numberFormat($tax); - } - - /** - * Get the subtotal (total - tax) of the items in the cart. - * - * @param int $decimals - * @param string $decimalPoint - * @param string $thousandSeparator - * @return float - */ - public function subtotal() - { - $content = $this->getContent(); - - $subTotal = $content->reduce(function ($subTotal, CartItem $cartItem) { - return $subTotal + ($cartItem->qty * $cartItem->price); - }, 0); - - return $this->numberFormat($subTotal); - } - - /** - * Search the cart content for a cart item matching the given search closure. - * - * @param \Closure $search - * @return Collection - */ - public function search(Closure $search) - { - $content = $this->getContent(); - - return $content->filter($search); - } - - /** - * Associate the cart item with the given rowId with the given model. - * - * @param string $rowId - * @param mixed $model - * @return void - */ - public function associate($rowId, $model) - { - if(is_string($model) && ! class_exists($model)) { - throw new UnknownModelException("The supplied model {$model} does not exist."); - } - - $cartItem = $this->get($rowId); - - $cartItem->associate($model); - - $content = $this->getContent(); - - $content->put($cartItem->rowId, $cartItem); - - $this->session->put($this->instance, $content); - } - - /** - * Set the tax rate for the cart item with the given rowId. - * - * @param string $rowId - * @param int|float $taxRate - * @return void - */ - public function setTax($rowId, $taxRate) - { - $cartItem = $this->get($rowId); - - $cartItem->setTaxRate($taxRate); - - $content = $this->getContent(); - - $content->put($cartItem->rowId, $cartItem); - - $this->session->put($this->instance, $content); - } - - /** - * Store an the current instance of the cart. - * - * @param mixed $identifier - * @return void - */ - public function store($identifier) - { - $content = $this->getContent(); - - if ($identifier instanceof InstanceIdentifier) { - $identifier = $identifier->getInstanceIdentifier(); - } - - $instance = $this->currentInstance(); - - if ($this->storedCartInstanceWithIdentifierExists($instance, $identifier)) { - throw new CartAlreadyStoredException("A cart with identifier {$identifier} was already stored."); - } - - $this->getConnection()->table($this->getTableName())->insert([ - 'identifier' => $identifier, - 'instance' => $instance, - 'content' => serialize($content), - 'created_at' => $this->createdAt ?: Carbon::now(), - 'updated_at' => Carbon::now(), - ]); - - $this->events->dispatch('cart.stored'); - - } - - /** - * @param $identifier - * - * @return bool - */ - private function storedCartInstanceWithIdentifierExists($instance, $identifier) - { - return $this->getConnection()->table($this->getTableName())->where(['identifier' => $identifier, 'instance'=> $instance])->exists(); - } - - - /** - * Restore the cart with the given identifier. - * - * @param mixed $identifier - * @return void - */ - public function restore($identifier) - { - if ($identifier instanceof InstanceIdentifier) { - $identifier = $identifier->getInstanceIdentifier(); - } - - $currentInstance = $this->currentInstance(); - - if (!$this->storedCartInstanceWithIdentifierExists($currentInstance, $identifier)) { - return; - } - - $stored = $this->getConnection()->table($this->getTableName()) - ->where(['identifier'=> $identifier, 'instance' => $currentInstance])->first(); - - $storedContent = unserialize(data_get($stored, 'content')); - - $this->instance(data_get($stored, 'instance')); - - $content = $this->getContent(); - - foreach ($storedContent as $cartItem) { - $content->put($cartItem->rowId, $cartItem); - } - - $this->events->dispatch('cart.restored'); - - $this->session->put($this->instance, $content); - - $this->instance($currentInstance); - - $this->createdAt = Carbon::parse(data_get($stored, 'created_at')); - $this->updatedAt = Carbon::parse(data_get($stored, 'updated_at')); - - $this->getConnection()->table($this->getTableName())->where(['identifier' => $identifier, 'instance' => $currentInstance])->delete(); - - } - - /** - * Merges the contents of another cart into this cart. - * - * @param mixed $identifier Identifier of the Cart to merge with. - * @param bool $keepDiscount Keep the discount of the CartItems. - * @param bool $keepTax Keep the tax of the CartItems. - * @param bool $dispatchAdd Flag to dispatch the add events. - * - * @return bool - */ - public function merge($identifier, $keepTax = false, $dispatchAdd = true, $instance = self::DEFAULT_INSTANCE) - { - if (!$this->storedCartInstanceWithIdentifierExists($instance, $identifier)) { - return false; - } - - $stored = $this->getConnection()->table($this->getTableName()) - ->where(['identifier'=> $identifier, 'instance'=> $instance])->first(); - - $storedContent = unserialize($stored->content); - - foreach ($storedContent as $cartItem) { - $this->addCartItem($cartItem, $keepTax, $dispatchAdd); - } - - $this->events->dispatch('cart.merged'); - - return true; - } - - /** - * Add an item to the cart. - * - * @param \Gloudemans\Shoppingcart\CartItem $item Item to add to the Cart - * @param bool $keepDiscount Keep the discount rate of the Item - * @param bool $keepTax Keep the Tax rate of the Item - * @param bool $dispatchEvent - * - * @return \Gloudemans\Shoppingcart\CartItem The CartItem - */ - public function addCartItem($item, $keepTax = false, $dispatchEvent = true) - { - if (!$keepTax) { - $item->setTaxRate($this->taxRate); - } - - $content = $this->getContent(); - - if ($content->has($item->rowId)) { - $item->qty += $content->get($item->rowId)->qty; - } - - $content->put($item->rowId, $item); - - if ($dispatchEvent) { - $this->events->dispatch('cart.adding', $item); - } - - $this->session->put($this->instance, $content); - - if ($dispatchEvent) { - $this->events->dispatch('cart.added', $item); - } - - return $item; - } - - /** - * Magic method to make accessing the total, tax and subtotal properties possible. - * - * @param string $attribute - * @return float|null - */ - public function __get($attribute) - { - if($attribute === 'total') { - return $this->total(); - } - - if($attribute === 'tax') { - return $this->tax(); - } - - if($attribute === 'subtotal') { - return $this->subtotal(); - } - - return null; - } - - /** - * Get the carts content, if there is no cart content set yet, return a new empty Collection - * - * @return Collection - */ - protected function getContent() - { - $content = $this->session->has($this->instance) - ? $this->session->get($this->instance) - : new Collection; - - return $content; - } - - /** - * Create a new CartItem from the supplied attributes. - * - * @param mixed $id - * @param mixed $name - * @param int|float $qty - * @param float $price - * @param array $options - * @return CartItem - */ - private function createCartItem($id, $name, $qty, $price, array $options) - { - if ($id instanceof Buyable) { - $cartItem = CartItem::fromBuyable($id, $qty ?: []); - $cartItem->setQuantity($name ?: 1); - $cartItem->associate($id); - } elseif (is_array($id)) { - $cartItem = CartItem::fromArray($id); - $cartItem->setQuantity($id['qty']); - } else { - $cartItem = CartItem::fromAttributes($id, $name, $price, $options); - $cartItem->setQuantity($qty); - } - - $cartItem->setTaxRate(config('cart.tax')); - - return $cartItem; - } - - /** - * Check if the item is a multidimensional array or an array of Buyables. - * - * @param mixed $item - * @return bool - */ - private function isMulti($item) - { - if ( ! is_array($item)) return false; - - return is_array(head($item)) || head($item) instanceof Buyable; - } - - /** - * @param $identifier - * @return bool - */ - private function storedCartWithIdentifierExists($identifier) - { - return $this->getConnection()->table($this->getTableName())->where('identifier', $identifier)->exists(); - } - - /** - * Get the database connection. - * - * @return Connection - */ - private function getConnection() - { - $connectionName = $this->getConnectionName(); - - return app(DatabaseManager::class)->connection($connectionName); - } - - /** - * Get the database table name. - * - * @return string - */ - private function getTableName() - { - return 'shopping_cart'; - } - - /** - * Get the database connection name. - * - * @return string - */ - private function getConnectionName() - { - $connection = config('cart.database.connection'); - - return is_null($connection) ? config('database.default') : $connection; - } - - /** - * Get the Formated number - * - * @param $value - * @param $decimals - * @param $decimalPoint - * @param $thousandSeparator - * @return string - */ - private function numberFormat($value) - { - $decimals = is_null(config('cart.format.decimals')) ? 2 : config('cart.format.decimals'); - $decimalPoint = is_null(config('cart.format.decimal_point')) ? '.' : config('cart.format.decimal_point'); - $thousandSeparator = ''; - - return number_format($value, $decimals, $decimalPoint, $thousandSeparator); - } -} diff --git a/packages/shoppingcart/CartItem.php b/packages/shoppingcart/CartItem.php deleted file mode 100644 index 4e74020..0000000 --- a/packages/shoppingcart/CartItem.php +++ /dev/null @@ -1,386 +0,0 @@ -id = $id; - $this->name = $name; - $this->price = floatval($price); - $this->options = new CartItemOptions($options); - $this->rowId = $this->generateRowId($id, $options); - } - - /** - * Returns the formatted price without TAX. - * - * @param int $decimals - * @param string $decimalPoint - * @param string $thousandSeparator - * @return string - */ - public function price() - { - return $this->numberFormat($this->price); - } - - /** - * Returns the formatted price with TAX. - * - * @param int $decimals - * @param string $decimalPoint - * @param string $thousandSeparator - * @return string - */ - public function priceTax() - { - return $this->numberFormat($this->priceTax); - } - - /** - * Returns the formatted subtotal. - * Subtotal is price for whole CartItem without TAX - * - * @param int $decimals - * @param string $decimalPoint - * @param string $thousandSeparator - * @return string - */ - public function subtotal() - { - return $this->numberFormat($this->subtotal); - } - - /** - * Returns the formatted total. - * Total is price for whole CartItem with TAX - * - * @param int $decimals - * @param string $decimalPoint - * @param string $thousandSeparator - * @return string - */ - public function total() - { - return $this->numberFormat($this->total); - } - - /** - * Returns the formatted tax. - * - * @param int $decimals - * @param string $decimalPoint - * @param string $thousandSeparator - * @return string - */ - public function tax() - { - return $this->numberFormat($this->tax); - } - - /** - * Returns the formatted tax. - * - * @param int $decimals - * @param string $decimalPoint - * @param string $thousandSeparator - * @return string - */ - public function taxTotal() - { - return $this->numberFormat($this->taxTotal); - } - - /** - * Set the quantity for this cart item. - * - * @param int|float $qty - */ - public function setQuantity($qty) - { - if(empty($qty) || ! is_numeric($qty)) - throw new \InvalidArgumentException('Please supply a valid quantity.'); - - $this->qty = $qty; - } - - /** - * Update the cart item from a Buyable. - * - * @param Buyable $item - * @return void - */ - public function updateFromBuyable(Buyable $item) - { - $this->id = $item->getBuyableIdentifier($this->options); - $this->name = $item->getBuyableDescription($this->options); - $this->price = $item->getBuyablePrice($this->options); - $this->priceTax = $this->price + $this->tax; - } - - /** - * Update the cart item from an array. - * - * @param array $attributes - * @return void - */ - public function updateFromArray(array $attributes) - { - $this->id = Arr::get($attributes, 'id', $this->id); - $this->qty = Arr::get($attributes, 'qty', $this->qty); - $this->name = Arr::get($attributes, 'name', $this->name); - $this->price = Arr::get($attributes, 'price', $this->price); - $this->priceTax = $this->price + $this->tax; - $this->options = new CartItemOptions(Arr::get($attributes, 'options', $this->options)); - - $this->rowId = $this->generateRowId($this->id, $this->options->all()); - } - - /** - * Associate the cart item with the given model. - * - * @param mixed $model - * @return CartItem - */ - public function associate($model) - { - $this->associatedModel = is_string($model) ? $model : get_class($model); - - return $this; - } - - /** - * Set the tax rate. - * - * @param int|float $taxRate - * @return CartItem - */ - public function setTaxRate($taxRate) - { - $this->taxRate = $taxRate; - - return $this; - } - - /** - * Get an attribute from the cart item or get the associated model. - * - * @param string $attribute - * @return mixed - */ - public function __get($attribute) - { - if(property_exists($this, $attribute)) { - return $this->{$attribute}; - } - - if($attribute === 'priceTax') { - return number_format($this->price + $this->tax, 2, '.', ''); - } - - if($attribute === 'subtotal') { - return number_format($this->qty * $this->price, 2, '.', ''); - } - - if($attribute === 'total') { - return number_format($this->qty * $this->priceTax, 2, '.', ''); - } - - if($attribute === 'tax') { - return number_format($this->price * ($this->taxRate / 100), 2, '.', ''); - } - - if($attribute === 'taxTotal') { - return number_format($this->tax * $this->qty, 2, '.', ''); - } - - if($attribute === 'model' && isset($this->associatedModel)) { - return with(new $this->associatedModel)->find($this->id); - } - - return null; - } - - /** - * Create a new instance from a Buyable. - * - * @param Buyable $item - * @param array $options - * @return CartItem - */ - public static function fromBuyable(Buyable $item, array $options = []) - { - return new self($item->getBuyableIdentifier($options), $item->getBuyableDescription($options), $item->getBuyablePrice($options), $options); - } - - /** - * Create a new instance from the given array. - * - * @param array $attributes - * @return CartItem - */ - public static function fromArray(array $attributes) - { - $options = Arr::get($attributes, 'options', []); - - return new self($attributes['id'], $attributes['name'], $attributes['price'], $options); - } - - /** - * Create a new instance from the given attributes. - * - * @param int|string $id - * @param string $name - * @param float $price - * @param array $options - * @return CartItem - */ - public static function fromAttributes($id, $name, $price, array $options = []) - { - return new self($id, $name, $price, $options); - } - - /** - * Generate a unique id for the cart item. - * - * @param string $id - * @param array $options - * @return string - */ - protected function generateRowId($id, array $options) - { - ksort($options); - - return md5($id . serialize($options)); - } - - /** - * Get the instance as an array. - * - * @return array - */ - public function toArray() - { - return [ - 'rowId' => $this->rowId, - 'id' => $this->id, - 'name' => $this->name, - 'qty' => $this->qty, - 'price' => $this->price, - 'options' => $this->options->toArray(), - 'tax' => $this->tax, - 'subtotal' => $this->subtotal - ]; - } - - /** - * Convert the object to its JSON representation. - * - * @param int $options - * @return string - */ - public function toJson($options = 0) - { - return json_encode($this->toArray(), $options); - } - - /** - * Get the formatted number. - * - * @param float $value - * @param int $decimals - * @param string $decimalPoint - * @param string $thousandSeparator - * @return string - */ - private function numberFormat($value) - { - $decimals = is_null(config('cart.format.decimals')) ? 2 : config('cart.format.decimals'); - $decimalPoint = is_null(config('cart.format.decimal_point')) ? '.' : config('cart.format.decimal_point'); - $thousandSeparator = ''; - - return number_format($value, $decimals, $decimalPoint, $thousandSeparator); - } -} diff --git a/packages/shoppingcart/CartItemOptions.php b/packages/shoppingcart/CartItemOptions.php deleted file mode 100644 index 18b9552..0000000 --- a/packages/shoppingcart/CartItemOptions.php +++ /dev/null @@ -1,19 +0,0 @@ -get($key); - } -} \ No newline at end of file diff --git a/packages/shoppingcart/Contracts/Buyable.php b/packages/shoppingcart/Contracts/Buyable.php deleted file mode 100644 index aeb9509..0000000 --- a/packages/shoppingcart/Contracts/Buyable.php +++ /dev/null @@ -1,27 +0,0 @@ -app->bind('cart', 'Gloudemans\Shoppingcart\Cart'); - - $config = __DIR__ . '/../config/cart.php'; - $this->mergeConfigFrom($config, 'cart'); - - $this->publishes([__DIR__ . '/../config/cart.php' => config_path('cart.php')], 'config'); - - $this->app['events']->listen(Logout::class, function () { - if ($this->app['config']->get('cart.destroy_on_logout')) { - $this->app->make(SessionManager::class)->forget('cart'); - } - }); - - if ( ! class_exists('CreateShoppingcartTable')) { - // Publish the migration - $timestamp = date('Y_m_d_His', time()); - - $this->publishes([ - __DIR__ . '/../database/migrations/0000_00_00_000000_create_shopping_cart_table.php' => database_path('migrations/'.$timestamp.'_create_shoppingcart_table.php'), - ], 'migrations'); - } - } -} diff --git a/packages/shoppingcart/_info/LICENSE b/packages/shoppingcart/_info/LICENSE deleted file mode 100644 index 61c6afc..0000000 --- a/packages/shoppingcart/_info/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Rob Gloudemans - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/packages/shoppingcart/_info/README.md b/packages/shoppingcart/_info/README.md deleted file mode 100644 index de8f5ab..0000000 --- a/packages/shoppingcart/_info/README.md +++ /dev/null @@ -1,477 +0,0 @@ -## LaravelShoppingcart - -A simple shopping cart implementation for Laravel 7 & 8 & 9 & 10. - -## Installation - -Install the package through [Composer](http://getcomposer.org/). - -Run the Composer require command from the Terminal: - - composer require mindscms/laravelshoppingcart - -### Laravel <= 7.0 - -Should you still be on version 7.0 of Laravel, the final steps for you are to add the service provider of the package and alias the package. To do this open your `config/app.php` file. - -Add a new line to the `providers` array: - - Gloudemans\Shoppingcart\ShoppingcartServiceProvider::class - -And optionally add a new line to the `aliases` array: - - 'Cart' => Gloudemans\Shoppingcart\Facades\Cart::class, - -Now you're ready to start using the shopping cart in your application. - -**As of version 2 of this package it's possibly to use dependency injection to inject an instance of the Cart class into your controller or other class** - -## Overview -Look at one of the following topics to learn more about LaravelShoppingcart - -* [Usage](#usage) -* [Collections](#collections) -* [Instances](#instances) -* [Models](#models) -* [Database](#database) -* [Exceptions](#exceptions) -* [Events](#events) -* [Example](#example) - -## Usage - -The shoppingcart gives you the following methods to use: - -### Cart::add() - -Adding an item to the cart is really simple, you just use the `add()` method, which accepts a variety of parameters. - -In its most basic form you can specify the id, name, quantity, price of the product you'd like to add to the cart. - -```php -Cart::add('293ad', 'Product 1', 1, 9.99); -``` - -As an optional fifth parameter you can pass it options, so you can add multiple items with the same id, but with (for instance) a different size. - -```php -Cart::add('293ad', 'Product 1', 1, 9.99, ['size' => 'large']); -``` - -**The `add()` method will return an CartItem instance of the item you just added to the cart.** - -Maybe you prefer to add the item using an array? As long as the array contains the required keys, you can pass it to the method. The options key is optional. - -```php -Cart::add(['id' => '293ad', 'name' => 'Product 1', 'qty' => 1, 'price' => 9.99, 'options' => ['size' => 'large']]); -``` - -New in version 2 of the package is the possibility to work with the `Buyable` interface. The way this works is that you have a model implement the `Buyable` interface, which will make you implement a few methods so the package knows how to get the id, name and price from your model. -This way you can just pass the `add()` method a model and the quantity and it will automatically add it to the cart. - -**As an added bonus it will automatically associate the model with the CartItem** - -```php -Cart::add($product, 1, ['size' => 'large']); -``` -As an optional third parameter you can add options. -```php -Cart::add($product, 1, ['size' => 'large']); -``` - -Finally, you can also add multipe items to the cart at once. -You can just pass the `add()` method an array of arrays, or an array of Buyables and they will be added to the cart. - -**When adding multiple items to the cart, the `add()` method will return an array of CartItems.** - -```php -Cart::add([ - ['id' => '293ad', 'name' => 'Product 1', 'qty' => 1, 'price' => 10.00], - ['id' => '4832k', 'name' => 'Product 2', 'qty' => 1, 'price' => 10.00, 'options' => ['size' => 'large']] -]); - -Cart::add([$product1, $product2]); - -``` - -### Cart::update() - -To update an item in the cart, you'll first need the rowId of the item. -Next you can use the `update()` method to update it. - -If you simply want to update the quantity, you'll pass the update method the rowId and the new quantity: - -```php -$rowId = 'da39a3ee5e6b4b0d3255bfef95601890afd80709'; - -Cart::update($rowId, 2); // Will update the quantity -``` - -If you want to update more attributes of the item, you can either pass the update method an array or a `Buyable` as the second parameter. This way you can update all information of the item with the given rowId. - -```php -Cart::update($rowId, ['name' => 'Product 1']); // Will update the name - -Cart::update($rowId, $product); // Will update the id, name and price - -``` - -### Cart::remove() - -To remove an item for the cart, you'll again need the rowId. This rowId you simply pass to the `remove()` method and it will remove the item from the cart. - -```php -$rowId = 'da39a3ee5e6b4b0d3255bfef95601890afd80709'; - -Cart::remove($rowId); -``` - -### Cart::get() - -If you want to get an item from the cart using its rowId, you can simply call the `get()` method on the cart and pass it the rowId. - -```php -$rowId = 'da39a3ee5e6b4b0d3255bfef95601890afd80709'; - -Cart::get($rowId); -``` - -### Cart::content() - -Of course you also want to get the carts content. This is where you'll use the `content` method. This method will return a Collection of CartItems which you can iterate over and show the content to your customers. - -```php -Cart::content(); -``` - -This method will return the content of the current cart instance, if you want the content of another instance, simply chain the calls. - -```php -Cart::instance('wishlist')->content(); -``` - -### Cart::destroy() - -If you want to completely remove the content of a cart, you can call the destroy method on the cart. This will remove all CartItems from the cart for the current cart instance. - -```php -Cart::destroy(); -``` - -### Cart::total() - -The `total()` method can be used to get the calculated total of all items in the cart, given there price and quantity. Includes any additional costs too. - -```php -Cart::total(); -``` - -The method will automatically format the result, which you can tweak using the three optional parameters - -```php -Cart::total($decimals, $decimalSeperator, $thousandSeperator); -``` - -You can set the default number format in the config file. - -**If you're not using the Facade, but use dependency injection in your (for instance) Controller, you can also simply get the total property `$cart->total`** - -### Cart::tax() - -The `tax()` method can be used to get the calculated amount of tax for all items in the cart, given there price and quantity. - -```php -Cart::tax(); -``` - -The method will automatically format the result, which you can tweak using the three optional parameters - -```php -Cart::tax($decimals, $decimalSeperator, $thousandSeperator); -``` - -You can set the default number format in the config file. - -**If you're not using the Facade, but use dependency injection in your (for instance) Controller, you can also simply get the tax property `$cart->tax`** - -### Cart::subtotal() - -The `subtotal()` method can be used to get the total of all items in the cart, minus the total amount of tax. - -```php -Cart::subtotal(); -``` - -The method will automatically format the result, which you can tweak using the three optional parameters - -```php -Cart::subtotal($decimals, $decimalSeperator, $thousandSeperator); -``` - -You can set the default number format in the config file. - -**If you're not using the Facade, but use dependency injection in your (for instance) Controller, you can also simply get the subtotal property `$cart->subtotal`** - -### Cart::count() - -If you want to know how many items there are in your cart, you can use the `count()` method. This method will return the total number of items in the cart. So if you've added 2 books and 1 shirt, it will return 3 items. - -```php -Cart::count(); -``` - -### Cart::search() - -To find an item in the cart, you can use the `search()` method. - -**This method was changed on version 2** - -Behind the scenes, the method simply uses the filter method of the Laravel Collection class. This means you must pass it a Closure in which you'll specify you search terms. - -If you for instance want to find all items with an id of 1: - -```php -$cart->search(function ($cartItem, $rowId) { - return $cartItem->id === 1; -}); -``` - -As you can see the Closure will receive two parameters. The first is the CartItem to perform the check against. The second parameter is the rowId of this CartItem. - -**The method will return a Collection containing all CartItems that where found** - -This way of searching gives you total control over the search process and gives you the ability to create very precise and specific searches. - -### Cart::addCost() - -If you want to add additional costs to the cart you can use the `addCost()` method. The method accepts a cost name and the price of the cost. This can be used for eg shipping or transaction costs. - -```php -Cart::addCost($name, $price) -``` - -**Add this method before summarizing the whole cart. The costs are not saved in the session (yet).** - -### Cart::getCost() - -Get an addition cost you added by `addCost()`. Accepts the cost name. Returns the formatted price of the cost. - -```php -Cart::getCost($name, $decimals, $decimalPoint, $thousandSeperator) -``` - -## Collections - -On multiple instances the Cart will return to you a Collection. This is just a simple Laravel Collection, so all methods you can call on a Laravel Collection are also available on the result. - -As an example, you can quicky get the number of unique products in a cart: - -```php -Cart::content()->count(); -``` - -Or you can group the content by the id of the products: - -```php -Cart::content()->groupBy('id'); -``` - -## Instances - -The packages supports multiple instances of the cart. The way this works is like this: - -You can set the current instance of the cart by calling `Cart::instance('newInstance')`. From this moment, the active instance of the cart will be `newInstance`, so when you add, remove or get the content of the cart, you're work with the `newInstance` instance of the cart. -If you want to switch instances, you just call `Cart::instance('otherInstance')` again, and you're working with the `otherInstance` again. - -So a little example: - -```php -Cart::instance('shopping')->add('192ao12', 'Product 1', 1, 9.99); - -// Get the content of the 'shopping' cart -Cart::content(); - -Cart::instance('wishlist')->add('sdjk922', 'Product 2', 1, 19.95, ['size' => 'medium']); - -// Get the content of the 'wishlist' cart -Cart::content(); - -// If you want to get the content of the 'shopping' cart again -Cart::instance('shopping')->content(); - -// And the count of the 'wishlist' cart again -Cart::instance('wishlist')->count(); -``` - -**N.B. Keep in mind that the cart stays in the last set instance for as long as you don't set a different one during script execution.** - -**N.B.2 The default cart instance is called `default`, so when you're not using instances,`Cart::content();` is the same as `Cart::instance('default')->content()`.** - -## Models - -Because it can be very convenient to be able to directly access a model from a CartItem is it possible to associate a model with the items in the cart. Let's say you have a `Product` model in your application. With the `associate()` method, you can tell the cart that an item in the cart, is associated to the `Product` model. - -That way you can access your model right from the `CartItem`! - -The model can be accessed via the `model` property on the CartItem. - -**If your model implements the `Buyable` interface and you used your model to add the item to the cart, it will associate automatically.** - -Here is an example: - -```php - -// First we'll add the item to the cart. -$cartItem = Cart::add('293ad', 'Product 1', 1, 9.99, ['size' => 'large']); - -// Next we associate a model with the item. -Cart::associate($cartItem->rowId, 'Product'); - -// Or even easier, call the associate method on the CartItem! -$cartItem->associate('Product'); - -// You can even make it a one-liner -Cart::add('293ad', 'Product 1', 1, 9.99, ['size' => 'large'])->associate('Product'); - -// Now, when iterating over the content of the cart, you can access the model. -foreach(Cart::content() as $row) { - echo 'You have ' . $row->qty . ' items of ' . $row->model->name . ' with description: "' . $row->model->description . '" in your cart.'; -} -``` -## Database - -- [Config](#configuration) -- [Storing the cart](#save-cart-to-database) -- [Restoring the cart](#retrieve-cart-from-database) - -### Configuration -To save cart into the database so you can retrieve it later, the package needs to know which database connection to use and what the name of the table is. -By default the package will use the default database connection and use a table named `shopping_cart`. -If you want to change these options, you'll have to publish the `config` file. - - php artisan vendor:publish --provider="Gloudemans\Shoppingcart\ShoppingcartServiceProvider" --tag="config" - -This will give you a `cart.php` config file in which you can make the changes. - -To make your life easy, the package also includes a ready to use `migration` which you can publish by running: - - php artisan vendor:publish --provider="Gloudemans\Shoppingcart\ShoppingcartServiceProvider" --tag="migrations" - -This will place a `shopping_cart` table's migration file into `database/migrations` directory. Now all you have to do is run `php artisan migrate` to migrate your database. - -### Storing the cart -To store your cart instance into the database, you have to call the `store($identifier) ` method. Where `$identifier` is a random key, for instance the id or username of the user. - - Cart::store('username'); - - // To store a cart instance named 'wishlist' - Cart::instance('wishlist')->store('username'); - -### Restoring the cart -If you want to retrieve the cart from the database and restore it, all you have to do is call the `restore($identifier)` where `$identifier` is the key you specified for the `store` method. - - Cart::restore('username'); - - // To restore a cart instance named 'wishlist' - Cart::instance('wishlist')->restore('username'); - -## Exceptions - -The Cart package will throw exceptions if something goes wrong. This way it's easier to debug your code using the Cart package or to handle the error based on the type of exceptions. The Cart packages can throw the following exceptions: - -| Exception | Reason | -| ---------------------------- | ---------------------------------------------------------------------------------- | -| *CartAlreadyStoredException* | When trying to store a cart that was already stored using the specified identifier | -| *InvalidRowIDException* | When the rowId that got passed doesn't exists in the current cart instance | -| *UnknownModelException* | When you try to associate an none existing model to a CartItem. | - -## Events - -The cart also has events build in. There are five events available for you to listen for. - -| Event | Fired | Parameter | -| ------------- | ---------------------------------------- | -------------------------------- | -| cart.added | When an item was added to the cart. | The `CartItem` that was added. | -| cart.updated | When an item in the cart was updated. | The `CartItem` that was updated. | -| cart.removed | When an item is removed from the cart. | The `CartItem` that was removed. | -| cart.stored | When the content of a cart was stored. | - | -| cart.restored | When the content of a cart was restored. | - | - -## Example - -Below is a little example of how to list the cart content in a table: - -```php - -// Add some items in your Controller. -Cart::add('192ao12', 'Product 1', 1, 9.99); -Cart::add('1239ad0', 'Product 2', 2, 5.95, ['size' => 'large']); - -// Set an additional cost (on the same page where you display your cart content) -Cart::addCost(Cart::COST_TRANSACTION, 0.10); -Cart::addCost(Cart::COST_SHIPPING, 5.00); -Cart::addCost('somethingelse', 1.11); - -// Display the content in a View. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ProductQtyPriceSubtotal
-

name; ?>

-

options->has('size') ? $row->options->size : ''); ?>

-
$price; ?>$total; ?>
 Subtotal
 Tax
 Transaction cost
 Transaction cost
 Transaction cost
 Total
-``` diff --git a/packages/shoppingcart/_info/_composer.json b/packages/shoppingcart/_info/_composer.json deleted file mode 100644 index ee51015..0000000 --- a/packages/shoppingcart/_info/_composer.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "mindscms/laravelshoppingcart", - "description": "Laravel Shopping cart", - "keywords": ["laravel", "shoppingcart"], - "license": "MIT", - "authors": [ - { - "name": "Rob Gloudemans", - "email": "info@robgloudemans.nl" - }, - { - "name": "Michael V.", - "email": "michael@michaelbelgium.me" - }, - { - "name": "Sami Mansour", - "email": "mindscms@gmail.com" - } - ], - "require": { - "illuminate/support": "^7.0|^8.0|^9.0|^10.0", - "illuminate/session": "^7.0|^8.0|^9.0|^10.0", - "illuminate/events": "^7.0|^8.0|^9.0|^10.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.5|^10.1", - "mockery/mockery": "^1.4", - "orchestra/testbench": "^7" - }, - "autoload": { - "psr-4": { - "Gloudemans\\Shoppingcart\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "Gloudemans\\Tests\\Shoppingcart\\": "tests/" - } - }, - "minimum-stability": "stable", - "extra": { - "laravel": { - "providers": [ - "Gloudemans\\Shoppingcart\\ShoppingcartServiceProvider" - ], - "aliases": { - "Cart": "Gloudemans\\Shoppingcart\\Facades\\Cart" - } - } - } -} diff --git a/packages/shoppingcart/_info/phpunit.xml b/packages/shoppingcart/_info/phpunit.xml deleted file mode 100644 index f994f39..0000000 --- a/packages/shoppingcart/_info/phpunit.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - ./tests/ - - - \ No newline at end of file diff --git a/packages/shoppingcart/_info/tests/CartAssertions.php b/packages/shoppingcart/_info/tests/CartAssertions.php deleted file mode 100644 index c351f40..0000000 --- a/packages/shoppingcart/_info/tests/CartAssertions.php +++ /dev/null @@ -1,35 +0,0 @@ -count(); - - PHPUnit::assertEquals($items, $cart->count(), "Expected the cart to contain {$items} items, but got {$actual}."); - } - - /** - * Assert that the cart contains the given number of rows. - * - * @param int $rows - * @param \Gloudemans\Shoppingcart\Cart $cart - */ - public function assertRowsInCart($rows, Cart $cart) - { - $actual = $cart->content()->count(); - - PHPUnit::assertCount($rows, $cart->content(), "Expected the cart to contain {$rows} rows, but got {$actual}."); - } -} diff --git a/packages/shoppingcart/_info/tests/CartItemTest.php b/packages/shoppingcart/_info/tests/CartItemTest.php deleted file mode 100644 index ac0bdf4..0000000 --- a/packages/shoppingcart/_info/tests/CartItemTest.php +++ /dev/null @@ -1,55 +0,0 @@ - 'XL', 'color' => 'red']); - $cartItem->setQuantity(2); - - $this->assertEquals([ - 'id' => 1, - 'name' => 'Some item', - 'price' => 10.00, - 'rowId' => '07d5da5550494c62daf9993cf954303f', - 'qty' => 2, - 'options' => [ - 'size' => 'XL', - 'color' => 'red' - ], - 'tax' => 0, - 'subtotal' => 20.00, - ], $cartItem->toArray()); - } - - /** @test */ - public function it_can_be_cast_to_json() - { - $cartItem = new CartItem(1, 'Some item', 10.00, ['size' => 'XL', 'color' => 'red']); - $cartItem->setQuantity(2); - - $this->assertJson($cartItem->toJson()); - - $json = '{"rowId":"07d5da5550494c62daf9993cf954303f","id":1,"name":"Some item","qty":2,"price":10,"options":{"size":"XL","color":"red"},"tax":"0.00","subtotal":"20.00"}'; - - $this->assertEquals($json, $cartItem->toJson()); - } -} \ No newline at end of file diff --git a/packages/shoppingcart/_info/tests/CartTest.php b/packages/shoppingcart/_info/tests/CartTest.php deleted file mode 100644 index ae2f878..0000000 --- a/packages/shoppingcart/_info/tests/CartTest.php +++ /dev/null @@ -1,945 +0,0 @@ -set('cart.database.connection', 'testing'); - - $app['config']->set('session.driver', 'array'); - - $app['config']->set('database.default', 'testing'); - $app['config']->set('database.connections.testing', [ - 'driver' => 'sqlite', - 'database' => ':memory:', - 'prefix' => '', - ]); - } - - /** - * Setup the test environment. - * - * @return void - */ - protected function setUp() - { - parent::setUp(); - - $this->app->afterResolving('migrator', function ($migrator) { - $migrator->path(realpath(__DIR__.'/../database/migrations')); - }); - } - - /** @test */ - public function it_has_a_default_instance() - { - $cart = $this->getCart(); - - $this->assertEquals(Cart::DEFAULT_INSTANCE, $cart->currentInstance()); - } - - /** @test */ - public function it_can_have_multiple_instances() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'First item')); - - $cart->instance('wishlist')->add(new BuyableProduct(2, 'Second item')); - - $this->assertItemsInCart(1, $cart->instance(Cart::DEFAULT_INSTANCE)); - $this->assertItemsInCart(1, $cart->instance('wishlist')); - } - - /** @test */ - public function it_can_add_an_item() - { - Event::fake(); - - $cart = $this->getCart(); - - $cart->add(new BuyableProduct); - - $this->assertEquals(1, $cart->count()); - - Event::assertDispatched('cart.added'); - } - - /** @test */ - public function it_will_return_the_cartitem_of_the_added_item() - { - Event::fake(); - - $cart = $this->getCart(); - - $cartItem = $cart->add(new BuyableProduct); - - $this->assertInstanceOf(CartItem::class, $cartItem); - $this->assertEquals('027c91341fd5cf4d2579b49c4b6a90da', $cartItem->rowId); - - Event::assertDispatched('cart.added'); - } - - /** @test */ - public function it_can_add_multiple_buyable_items_at_once() - { - Event::fake(); - - $cart = $this->getCart(); - - $cart->add([new BuyableProduct(1), new BuyableProduct(2)]); - - $this->assertEquals(2, $cart->count()); - - Event::assertDispatched('cart.added'); - } - - /** @test */ - public function it_will_return_an_array_of_cartitems_when_you_add_multiple_items_at_once() - { - Event::fake(); - - $cart = $this->getCart(); - - $cartItems = $cart->add([new BuyableProduct(1), new BuyableProduct(2)]); - - $this->assertTrue(is_array($cartItems)); - $this->assertCount(2, $cartItems); - $this->assertContainsOnlyInstancesOf(CartItem::class, $cartItems); - - Event::assertDispatched('cart.added'); - } - - /** @test */ - public function it_can_add_an_item_from_attributes() - { - Event::fake(); - - $cart = $this->getCart(); - - $cart->add(1, 'Test item', 1, 10.00); - - $this->assertEquals(1, $cart->count()); - - Event::assertDispatched('cart.added'); - } - - /** @test */ - public function it_can_add_an_item_from_an_array() - { - Event::fake(); - - $cart = $this->getCart(); - - $cart->add(['id' => 1, 'name' => 'Test item', 'qty' => 1, 'price' => 10.00]); - - $this->assertEquals(1, $cart->count()); - - Event::assertDispatched('cart.added'); - } - - /** @test */ - public function it_can_add_multiple_array_items_at_once() - { - Event::fake(); - - $cart = $this->getCart(); - - $cart->add([ - ['id' => 1, 'name' => 'Test item 1', 'qty' => 1, 'price' => 10.00], - ['id' => 2, 'name' => 'Test item 2', 'qty' => 1, 'price' => 10.00] - ]); - - $this->assertEquals(2, $cart->count()); - - Event::assertDispatched('cart.added'); - } - - /** @test */ - public function it_can_add_an_item_with_options() - { - Event::fake(); - - $cart = $this->getCart(); - - $options = ['size' => 'XL', 'color' => 'red']; - - $cart->add(new BuyableProduct, 1, $options); - - $cartItem = $cart->get('07d5da5550494c62daf9993cf954303f'); - - $this->assertInstanceOf(CartItem::class, $cartItem); - $this->assertEquals('XL', $cartItem->options->size); - $this->assertEquals('red', $cartItem->options->color); - - Event::assertDispatched('cart.added'); - } - - /** - * @test - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Please supply a valid identifier. - */ - public function it_will_validate_the_identifier() - { - $cart = $this->getCart(); - - $cart->add(null, 'Some title', 1, 10.00); - } - - /** - * @test - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Please supply a valid name. - */ - public function it_will_validate_the_name() - { - $cart = $this->getCart(); - - $cart->add(1, null, 1, 10.00); - } - - /** - * @test - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Please supply a valid quantity. - */ - public function it_will_validate_the_quantity() - { - $cart = $this->getCart(); - - $cart->add(1, 'Some title', 'invalid', 10.00); - } - - /** - * @test - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Please supply a valid price. - */ - public function it_will_validate_the_price() - { - $cart = $this->getCart(); - - $cart->add(1, 'Some title', 1, 'invalid'); - } - - /** @test */ - public function it_will_update_the_cart_if_the_item_already_exists_in_the_cart() - { - $cart = $this->getCart(); - - $item = new BuyableProduct; - - $cart->add($item); - $cart->add($item); - - $this->assertItemsInCart(2, $cart); - $this->assertRowsInCart(1, $cart); - } - - /** @test */ - public function it_will_keep_updating_the_quantity_when_an_item_is_added_multiple_times() - { - $cart = $this->getCart(); - - $item = new BuyableProduct; - - $cart->add($item); - $cart->add($item); - $cart->add($item); - - $this->assertItemsInCart(3, $cart); - $this->assertRowsInCart(1, $cart); - } - - /** @test */ - public function it_can_update_the_quantity_of_an_existing_item_in_the_cart() - { - Event::fake(); - - $cart = $this->getCart(); - - $cart->add(new BuyableProduct); - - $cart->update('027c91341fd5cf4d2579b49c4b6a90da', 2); - - $this->assertItemsInCart(2, $cart); - $this->assertRowsInCart(1, $cart); - - Event::assertDispatched('cart.updated'); - } - - /** @test */ - public function it_can_update_an_existing_item_in_the_cart_from_a_buyable() - { - Event::fake(); - - $cart = $this->getCart(); - - $cart->add(new BuyableProduct); - - $cart->update('027c91341fd5cf4d2579b49c4b6a90da', new BuyableProduct(1, 'Different description')); - - $this->assertItemsInCart(1, $cart); - $this->assertEquals('Different description', $cart->get('027c91341fd5cf4d2579b49c4b6a90da')->name); - - Event::assertDispatched('cart.updated'); - } - - /** @test */ - public function it_can_update_an_existing_item_in_the_cart_from_an_array() - { - Event::fake(); - - $cart = $this->getCart(); - - $cart->add(new BuyableProduct); - - $cart->update('027c91341fd5cf4d2579b49c4b6a90da', ['name' => 'Different description']); - - $this->assertItemsInCart(1, $cart); - $this->assertEquals('Different description', $cart->get('027c91341fd5cf4d2579b49c4b6a90da')->name); - - Event::assertDispatched('cart.updated'); - } - - /** - * @test - * @expectedException \Gloudemans\Shoppingcart\Exceptions\InvalidRowIDException - */ - public function it_will_throw_an_exception_if_a_rowid_was_not_found() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct); - - $cart->update('none-existing-rowid', new BuyableProduct(1, 'Different description')); - } - - /** @test */ - public function it_will_regenerate_the_rowid_if_the_options_changed() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct, 1, ['color' => 'red']); - - $cart->update('ea65e0bdcd1967c4b3149e9e780177c0', ['options' => ['color' => 'blue']]); - - $this->assertItemsInCart(1, $cart); - $this->assertEquals('7e70a1e9aaadd18c72921a07aae5d011', $cart->content()->first()->rowId); - $this->assertEquals('blue', $cart->get('7e70a1e9aaadd18c72921a07aae5d011')->options->color); - } - - /** @test */ - public function it_will_add_the_item_to_an_existing_row_if_the_options_changed_to_an_existing_rowid() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct, 1, ['color' => 'red']); - $cart->add(new BuyableProduct, 1, ['color' => 'blue']); - - $cart->update('7e70a1e9aaadd18c72921a07aae5d011', ['options' => ['color' => 'red']]); - - $this->assertItemsInCart(2, $cart); - $this->assertRowsInCart(1, $cart); - } - - /** @test */ - public function it_can_remove_an_item_from_the_cart() - { - Event::fake(); - - $cart = $this->getCart(); - - $cart->add(new BuyableProduct); - - $cart->remove('027c91341fd5cf4d2579b49c4b6a90da'); - - $this->assertItemsInCart(0, $cart); - $this->assertRowsInCart(0, $cart); - - Event::assertDispatched('cart.removed'); - } - - /** @test */ - public function it_will_remove_the_item_if_its_quantity_was_set_to_zero() - { - Event::fake(); - - $cart = $this->getCart(); - - $cart->add(new BuyableProduct); - - $cart->update('027c91341fd5cf4d2579b49c4b6a90da', 0); - - $this->assertItemsInCart(0, $cart); - $this->assertRowsInCart(0, $cart); - - Event::assertDispatched('cart.removed'); - } - - /** @test */ - public function it_will_remove_the_item_if_its_quantity_was_set_negative() - { - Event::fake(); - - $cart = $this->getCart(); - - $cart->add(new BuyableProduct); - - $cart->update('027c91341fd5cf4d2579b49c4b6a90da', -1); - - $this->assertItemsInCart(0, $cart); - $this->assertRowsInCart(0, $cart); - - Event::assertDispatched('cart.removed'); - } - - /** @test */ - public function it_can_get_an_item_from_the_cart_by_its_rowid() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct); - - $cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da'); - - $this->assertInstanceOf(CartItem::class, $cartItem); - } - - /** @test */ - public function it_can_get_the_content_of_the_cart() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1)); - $cart->add(new BuyableProduct(2)); - - $content = $cart->content(); - - $this->assertInstanceOf(Collection::class, $content); - $this->assertCount(2, $content); - } - - /** @test */ - public function it_will_return_an_empty_collection_if_the_cart_is_empty() - { - $cart = $this->getCart(); - - $content = $cart->content(); - - $this->assertInstanceOf(Collection::class, $content); - $this->assertCount(0, $content); - } - - /** @test */ - public function it_will_include_the_tax_and_subtotal_when_converted_to_an_array() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1)); - $cart->add(new BuyableProduct(2)); - - $content = $cart->content(); - - $this->assertInstanceOf(Collection::class, $content); - $this->assertEquals([ - '027c91341fd5cf4d2579b49c4b6a90da' => [ - 'rowId' => '027c91341fd5cf4d2579b49c4b6a90da', - 'id' => 1, - 'name' => 'Item name', - 'qty' => 1, - 'price' => 10.00, - 'tax' => 2.10, - 'subtotal' => 10.0, - 'options' => [], - ], - '370d08585360f5c568b18d1f2e4ca1df' => [ - 'rowId' => '370d08585360f5c568b18d1f2e4ca1df', - 'id' => 2, - 'name' => 'Item name', - 'qty' => 1, - 'price' => 10.00, - 'tax' => 2.10, - 'subtotal' => 10.0, - 'options' => [], - ] - ], $content->toArray()); - } - - /** @test */ - public function it_can_destroy_a_cart() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct); - - $this->assertItemsInCart(1, $cart); - - $cart->destroy(); - - $this->assertItemsInCart(0, $cart); - } - - /** @test */ - public function it_can_get_the_total_price_of_the_cart_content() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'First item', 10.00)); - $cart->add(new BuyableProduct(2, 'Second item', 25.00), 2); - - $this->assertItemsInCart(3, $cart); - $this->assertEquals(60.00, $cart->subtotal()); - } - - /** @test */ - public function it_can_return_a_formatted_total() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'First item', 1000.00)); - $cart->add(new BuyableProduct(2, 'Second item', 2500.00), 2); - - $this->assertItemsInCart(3, $cart); - $this->assertEquals('6.000,00', $cart->subtotal(2, ',', '.')); - } - - /** @test */ - public function it_can_search_the_cart_for_a_specific_item() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'Some item')); - $cart->add(new BuyableProduct(2, 'Another item')); - - $cartItem = $cart->search(function ($cartItem, $rowId) { - return $cartItem->name == 'Some item'; - }); - - $this->assertInstanceOf(Collection::class, $cartItem); - $this->assertCount(1, $cartItem); - $this->assertInstanceOf(CartItem::class, $cartItem->first()); - $this->assertEquals(1, $cartItem->first()->id); - } - - /** @test */ - public function it_can_search_the_cart_for_multiple_items() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'Some item')); - $cart->add(new BuyableProduct(2, 'Some item')); - $cart->add(new BuyableProduct(3, 'Another item')); - - $cartItem = $cart->search(function ($cartItem, $rowId) { - return $cartItem->name == 'Some item'; - }); - - $this->assertInstanceOf(Collection::class, $cartItem); - } - - /** @test */ - public function it_can_search_the_cart_for_a_specific_item_with_options() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'Some item'), 1, ['color' => 'red']); - $cart->add(new BuyableProduct(2, 'Another item'), 1, ['color' => 'blue']); - - $cartItem = $cart->search(function ($cartItem, $rowId) { - return $cartItem->options->color == 'red'; - }); - - $this->assertInstanceOf(Collection::class, $cartItem); - $this->assertCount(1, $cartItem); - $this->assertInstanceOf(CartItem::class, $cartItem->first()); - $this->assertEquals(1, $cartItem->first()->id); - } - - /** @test */ - public function it_will_associate_the_cart_item_with_a_model_when_you_add_a_buyable() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct); - - $cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da'); - - $this->assertContains(BuyableProduct::class, Assert::readAttribute($cartItem, 'associatedModel')); - } - - /** @test */ - public function it_can_associate_the_cart_item_with_a_model() - { - $cart = $this->getCart(); - - $cart->add(1, 'Test item', 1, 10.00); - - $cart->associate('027c91341fd5cf4d2579b49c4b6a90da', new ProductModel); - - $cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da'); - - $this->assertEquals(ProductModel::class, Assert::readAttribute($cartItem, 'associatedModel')); - } - - /** - * @test - * @expectedException \Gloudemans\Shoppingcart\Exceptions\UnknownModelException - * @expectedExceptionMessage The supplied model SomeModel does not exist. - */ - public function it_will_throw_an_exception_when_a_non_existing_model_is_being_associated() - { - $cart = $this->getCart(); - - $cart->add(1, 'Test item', 1, 10.00); - - $cart->associate('027c91341fd5cf4d2579b49c4b6a90da', 'SomeModel'); - } - - /** @test */ - public function it_can_get_the_associated_model_of_a_cart_item() - { - $cart = $this->getCart(); - - $cart->add(1, 'Test item', 1, 10.00); - - $cart->associate('027c91341fd5cf4d2579b49c4b6a90da', new ProductModel); - - $cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da'); - - $this->assertInstanceOf(ProductModel::class, $cartItem->model); - $this->assertEquals('Some value', $cartItem->model->someValue); - } - - /** @test */ - public function it_can_calculate_the_subtotal_of_a_cart_item() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'Some title', 9.99), 3); - - $cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da'); - - $this->assertEquals(29.97, $cartItem->subtotal); - } - - /** @test */ - public function it_can_return_a_formatted_subtotal() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'Some title', 500), 3); - - $cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da'); - - $this->assertEquals('1.500,00', $cartItem->subtotal(2, ',', '.')); - } - - /** @test */ - public function it_can_calculate_tax_based_on_the_default_tax_rate_in_the_config() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'Some title', 10.00), 1); - - $cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da'); - - $this->assertEquals(2.10, $cartItem->tax); - } - - /** @test */ - public function it_can_calculate_tax_based_on_the_specified_tax() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'Some title', 10.00), 1); - - $cart->setTax('027c91341fd5cf4d2579b49c4b6a90da', 19); - - $cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da'); - - $this->assertEquals(1.90, $cartItem->tax); - } - - /** @test */ - public function it_can_return_the_calculated_tax_formatted() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'Some title', 10000.00), 1); - - $cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da'); - - $this->assertEquals('2.100,00', $cartItem->tax(2, ',', '.')); - } - - /** @test */ - public function it_can_calculate_the_total_tax_for_all_cart_items() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'Some title', 10.00), 1); - $cart->add(new BuyableProduct(2, 'Some title', 20.00), 2); - - $this->assertEquals(10.50, $cart->tax); - } - - /** @test */ - public function it_can_return_formatted_total_tax() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'Some title', 1000.00), 1); - $cart->add(new BuyableProduct(2, 'Some title', 2000.00), 2); - - $this->assertEquals('1.050,00', $cart->tax(2, ',', '.')); - } - - /** @test */ - public function it_can_return_the_subtotal() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'Some title', 10.00), 1); - $cart->add(new BuyableProduct(2, 'Some title', 20.00), 2); - - $this->assertEquals(50.00, $cart->subtotal); - } - - /** @test */ - public function it_can_return_formatted_subtotal() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'Some title', 1000.00), 1); - $cart->add(new BuyableProduct(2, 'Some title', 2000.00), 2); - - $this->assertEquals('5000,00', $cart->subtotal(2, ',', '')); - } - - /** @test */ - public function it_can_return_cart_formated_numbers_by_config_values() - { - $this->setConfigFormat(2, ',', ''); - - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'Some title', 1000.00), 1); - $cart->add(new BuyableProduct(2, 'Some title', 2000.00), 2); - - $this->assertEquals('5000,00', $cart->subtotal()); - $this->assertEquals('1050,00', $cart->tax()); - $this->assertEquals('6050,00', $cart->total()); - - $this->assertEquals('5000,00', $cart->subtotal); - $this->assertEquals('1050,00', $cart->tax); - $this->assertEquals('6050,00', $cart->total); - } - - /** @test */ - public function it_can_return_cartItem_formated_numbers_by_config_values() - { - $this->setConfigFormat(2, ',', ''); - - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'Some title', 2000.00), 2); - - $cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da'); - - $this->assertEquals('2000,00', $cartItem->price()); - $this->assertEquals('2420,00', $cartItem->priceTax()); - $this->assertEquals('4000,00', $cartItem->subtotal()); - $this->assertEquals('4840,00', $cartItem->total()); - $this->assertEquals('420,00', $cartItem->tax()); - $this->assertEquals('840,00', $cartItem->taxTotal()); - } - - /** @test */ - public function it_can_store_the_cart_in_a_database() - { - $this->artisan('migrate', [ - '--database' => 'testing', - ]); - - Event::fake(); - - $cart = $this->getCart(); - - $cart->add(new BuyableProduct); - - $cart->store($identifier = 123); - - $serialized = serialize($cart->content()); - - $this->assertDatabaseHas('shopping_cart', ['identifier' => $identifier, 'instance' => 'default', 'content' => $serialized]); - - Event::assertDispatched('cart.stored'); - } - - /** - * @test - * @expectedException \Gloudemans\Shoppingcart\Exceptions\CartAlreadyStoredException - * @expectedExceptionMessage A cart with identifier 123 was already stored. - */ - public function it_will_throw_an_exception_when_a_cart_was_already_stored_using_the_specified_identifier() - { - $this->artisan('migrate', [ - '--database' => 'testing', - ]); - - Event::fake(); - - $cart = $this->getCart(); - - $cart->add(new BuyableProduct); - - $cart->store($identifier = 123); - - $cart->store($identifier); - - Event::assertDispatched('cart.stored'); - } - - /** @test */ - public function it_can_restore_a_cart_from_the_database() - { - $this->artisan('migrate', [ - '--database' => 'testing', - ]); - - Event::fake(); - - $cart = $this->getCart(); - - $cart->add(new BuyableProduct); - - $cart->store($identifier = 123); - - $cart->destroy(); - - $this->assertItemsInCart(0, $cart); - - $cart->restore($identifier); - - $this->assertItemsInCart(1, $cart); - - $this->assertDatabaseMissing('shopping_cart', ['identifier' => $identifier, 'instance' => 'default']); - - Event::assertDispatched('cart.restored'); - } - - /** @test */ - public function it_will_just_keep_the_current_instance_if_no_cart_with_the_given_identifier_was_stored() - { - $this->artisan('migrate', [ - '--database' => 'testing', - ]); - - $cart = $this->getCart(); - - $cart->restore($identifier = 123); - - $this->assertItemsInCart(0, $cart); - } - - /** @test */ - public function it_can_calculate_all_values() - { - $cart = $this->getCart(); - - $cart->add(new BuyableProduct(1, 'First item', 10.00), 2); - - $cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da'); - - $cart->setTax('027c91341fd5cf4d2579b49c4b6a90da', 19); - - $this->assertEquals(10.00, $cartItem->price(2)); - $this->assertEquals(11.90, $cartItem->priceTax(2)); - $this->assertEquals(20.00, $cartItem->subtotal(2)); - $this->assertEquals(23.80, $cartItem->total(2)); - $this->assertEquals(1.90, $cartItem->tax(2)); - $this->assertEquals(3.80, $cartItem->taxTotal(2)); - - $this->assertEquals(20.00, $cart->subtotal(2)); - $this->assertEquals(23.80, $cart->total(2)); - $this->assertEquals(3.80, $cart->tax(2)); - } - - /** @test */ - public function it_will_destroy_the_cart_when_the_user_logs_out_and_the_config_setting_was_set_to_true() - { - $this->app['config']->set('cart.destroy_on_logout', true); - - $this->app->instance(SessionManager::class, Mockery::mock(SessionManager::class, function ($mock) { - $mock->shouldReceive('forget')->once()->with('cart'); - })); - - $user = Mockery::mock(Authenticatable::class); - - event(new Logout($user)); - } - - /** - * Get an instance of the cart. - * - * @return \Gloudemans\Shoppingcart\Cart - */ - private function getCart() - { - $session = $this->app->make('session'); - $events = $this->app->make('events'); - - return new Cart($session, $events); - } - - /** - * Set the config number format. - * - * @param int $decimals - * @param string $decimalPoint - * @param string $thousandSeperator - */ - private function setConfigFormat($decimals, $decimalPoint, $thousandSeperator) - { - $this->app['config']->set('cart.format.decimals', $decimals); - $this->app['config']->set('cart.format.decimal_point', $decimalPoint); - $this->app['config']->set('cart.format.thousand_separator', $thousandSeperator); - } -} diff --git a/packages/shoppingcart/_info/tests/Fixtures/BuyableProduct.php b/packages/shoppingcart/_info/tests/Fixtures/BuyableProduct.php deleted file mode 100644 index a58e830..0000000 --- a/packages/shoppingcart/_info/tests/Fixtures/BuyableProduct.php +++ /dev/null @@ -1,67 +0,0 @@ -id = $id; - $this->name = $name; - $this->price = $price; - } - - /** - * Get the identifier of the Buyable item. - * - * @return int|string - */ - public function getBuyableIdentifier($options = null) - { - return $this->id; - } - - /** - * Get the description or title of the Buyable item. - * - * @return string - */ - public function getBuyableDescription($options = null) - { - return $this->name; - } - - /** - * Get the price of the Buyable item. - * - * @return float - */ - public function getBuyablePrice($options = null) - { - return $this->price; - } -} \ No newline at end of file diff --git a/packages/shoppingcart/_info/tests/Fixtures/ProductModel.php b/packages/shoppingcart/_info/tests/Fixtures/ProductModel.php deleted file mode 100644 index 70494ca..0000000 --- a/packages/shoppingcart/_info/tests/Fixtures/ProductModel.php +++ /dev/null @@ -1,13 +0,0 @@ - 15, - - /* - |-------------------------------------------------------------------------- - | Shopping cart database settings - |-------------------------------------------------------------------------- - | - | Here you can set the connection that the shopping cart should use when - | storing and restoring a cart. - | - */ - - 'database' => [ - - 'connection' => env('DB_CONNECTION', 'mysql'), - - 'table' => 'shopping_cart', - - ], - - /* - |-------------------------------------------------------------------------- - | Destroy the cart on user logout - |-------------------------------------------------------------------------- - | - | When this option is set to 'true' the cart will automatically - | destroy all cart instances when the user logs out. - | - */ - - 'destroy_on_logout' => false, - - /* - |-------------------------------------------------------------------------- - | Default number format - |-------------------------------------------------------------------------- - | - | This defaults will be used for the formated numbers if you don't - | set them in the method call. - | - */ - - 'format' => [ - - 'decimals' => 2, - - 'decimal_point' => '.', - - 'thousand_separator' => '' - - ], - -]; \ No newline at end of file diff --git a/packages/shoppingcart/database/migrations/0000_00_00_000000_create_shopping_cart_table.php b/packages/shoppingcart/database/migrations/0000_00_00_000000_create_shopping_cart_table.php deleted file mode 100644 index 891afc7..0000000 --- a/packages/shoppingcart/database/migrations/0000_00_00_000000_create_shopping_cart_table.php +++ /dev/null @@ -1,30 +0,0 @@ -string('identifier'); - $table->string('instance'); - $table->longText('content'); - $table->nullableTimestamps(); - - $table->primary(['identifier', 'instance']); - }); - } - /** - * Reverse the migrations. - */ - public function down() - { - Schema::drop('shopping_cart'); - } -} diff --git a/public/assets/css/custom-style.css b/public/assets/css/custom-style.css index b72c1f9..2315f98 100644 --- a/public/assets/css/custom-style.css +++ b/public/assets/css/custom-style.css @@ -1,6 +1,6 @@ h1, .h1 { - font-family: 'Pacifico', cursive; + font-family: 'Raleway', 'Open Sans', Arial, Helvetica, sans-serif; font-size: 1.2em; } @@ -21,7 +21,7 @@ h2 { h3.h3 { - font-family: 'Pacifico', cursive; + font-family: 'Raleway', 'Open Sans', Arial, Helvetica, sans-serif; font-size: 1.6em; color:#b5c49b; margin-bottom: 25px; diff --git a/public/assets/images/logo_dark.png b/public/assets/images/logo_dark.png index f52accb49695f4c006170d6b35c1751a567ad980..7149a6cda7e63410f08078e601c9697667ec723e 100644 GIT binary patch literal 56787 zcmaI6b9`mZwk{l79ox2T+qP}n9Xsiy;}zSs?WAMdb|;@QQAS!^6)1N>KtNq!z<^Kwzb{mP0>@oK+g;7c(%s9% z)dEDs+{x5}SjNG`%0kt`#N5Ya!h#3tEe-`{1!pk}Ya3}_R|_>?MRhY@J2M`0QXxTN zes5l20}dAMCdA$j_Kt46-U6imYL^%I{7*3xDe=FmxZ4Sk{x74n6_km^oLnu4c^Fw3 z%$S*3iMedFY8*nOWJHn7No(I2l-2dD(b)nc0c|{UZf-=xT1st12$} z@9uza0;JaN?#{eSOkQ4Ij9zSvPOer=EId3sOw6oItgH;c8Vqhej_xMj432JO|7k(o z!p+Rp#@XG*$&vV<7EMf@Jlq9HfyVx?Q8+j&DEwE$j&A?<70_!;-X_jWER4)d4i5he z?O(Os+*K|9w;BIqZ8vovXA34(3pXbZS2N(0Sd#rm8R)+McSrwJ1X{x@?qufSVBzR4 zBQ8J+EMYXaG3S+F=H_H!WnE1$V38CR;}Q9fu8gCbyNRQj z#eZ~d{CI*}>7H(o{1rswH$A1cG z{&DcX?X_^V@w70Pbaiqd{+EY%ZT<%<*w`i6M7X&)#M#7{fg|7+VPg>!kr3nH;F4q) z=Vs?1{kN|9|1kQ0>vI18>M{Y1Vftr!|J!u`rwABB|2+Oz`~qM8YXw+10>j=F7~j?C z`0gMe8-g<8BI@27R{_w*1k0H>xvqX{Jr@R=Os!jf1vqi%J(R@^KH=;s-S*O=hK<<@ zWJy;M6riG2Ryl_;kKDCt&EN)Y4EMXm!3&Dx3E-B((*mRs`A2rs%F@8cWNxqrYY13Qx^_PpIo zkKqDM`%F7%ZlC61VWNN`v=P)_cb`Xdwp-?H8n{6GP3a>kQbtM;9QQaG|$L(o%+_hYm@DssOPn=&S38`-A+Ku*1-5d@!985DHT(in*-C1vU zVs_wVgoiHUqy}HcFZE-4xcJqXzpLaS7p*K|Sc1~}mo6cxb7+4PKN$>|2uh4r@p$-P zJ&EF;I#}K6nOSv%uC5=zbG5b-*i9-DoF+sW>e+ zA(g38g)L`nv436bCubjV3%U{u{?NUC8jb3{ zqC_c5(F(#fJxq?!)tv13q#UEWUoNgLnyIK%7E`ps_`vtk{m8V8}B!!z7h z&UCYa-_N>YeMNi%jCL0Lo#{KH%G@9?kYS@z{^s# zpIq5O8*+2Pb9KS0-G)-I^*xM?%AL!_M&+2+<&H?(903Bf@q%I7TPew_ae!ZoZVe*K z{_xq++nM=4aY2IFLqS5jK!orUai#R;x1rT*i=5+1#q)e$fph)bGT%jD;x5P8mD;!B z5fmE^@x4?*E3YWn1ch~?r^rl@UR{l5Py#@=iI66CXX;1IvpS9m_wHJwVL zjNNnPrtS~*B7RTp+XZ3?o=m8^LQ7-@t7h>yj*yh{09?1{f&x@aL-+Y%%t>O%uekQB zl<7uhzAQckU%9xE6}#I)8;%i`>V8UbD!X4<4d(}s>Uz8|Z^nOmzpu-!W*CCk3jCR@ z2z`U|qIK2PsG1cYSxqy z6DT#?GRUZQ%eFV#FDcO7;762xPSQLSUnP}~>!8!-NLFB<+kbH{qUUC)@(Zq3syh*V zS{b^AFdbdCco}uQm9F2i0M|gKICgqStiVE>V;}r5&WR{x?ucnUF#3*IQAg-H}*`&;vk1W)6HN*m6ve0hyDu z&Yg#(s3#Q1Wz&=HhismgUs(oYike&954FSPNB4+&KPpSgz6pul1g0NShaNyMj-qx2 zevR($09$%c%SbCVt9O`RCo+jaR~P*W`@-XEyHWY57Ndz#yJYipYDF6}&bL(`G}eG@ zttv2kmK-i0x!T+1>!-IXV>nU)AzHQo(``G>C$7S-un=R}=PyyVz%ZlJ@G*>3Gz&p( zZBsLK>ijzgBOY3~YL%fwM$B$3pnhz}VljKhcgiLsAk;Z&>eBkEa!P>_rh%mW(~Li0 zkifY|>&w?Fi0>(|nPR1w4H8Fas`1U%=B6?^Js9=2drRCs^iegoK+GVJ%3d&6v#<21 za-?I5VKi#8bjYu=E%5`}J~(%*?aN`z%|MJ`2%WpP1Lvh=xHOskN4`F~MFQbe&Sqlo z?wSskT}ut4ZeOLdKm}=NLGaS8e3Z;Azu!@=??E(G8fI5ccoLPS?$gRiUIYpn0y8LL z4NZ2NyT}P?x*2UYGALKWN_)c@|AMB)E7JOQ*m`tFYIx=ou0SB^%mM|Dg;}4#mh+zS zpWfx~c$`dK9D~>%pXL%7JxfF{cr6ihr$%-u(LUUDvf}5BKO$zcuE$!#*HNazi|7}$ z7~2JB(p7d{z?^mTydedkf{4=kfSsVyf}QE7bh+{psz$-uEN_@_QBQ}zE?-T{PLIUm z@(#Csh&pnVuw2$?{V>R|#OqPj5jj1sK8QAy^71(hxfxI_o7;!?aZQ1%)oEY1jY28@ zHm<@o^kZG~9f^MAYPkE!rrHO(u``l)TC(aGfou@9gvR4lc(b+WHur+hhC@;uw`kFn z4fB{Wky%0}mTis|7v0@(1*#kY^6hFTc=nUZ=aB*dD~bLQbtx2 zUcUwT9{+$1*H813A-3j9@1c6CS@>>lFUPC_rV;@mGsQ#zs;-|NE}xw*fkB8eit%B| zx-hxO&*yY=n;4c~XGeic_OSKbM>yu%5i2>88&3s3utjVrFyW#k@seiD*n-c~-aUrt z77CPT3PF?4=MOx{E4L2kju4Xj+?T(2BjCaFQ8f2Ha(e1t5?b-I@>|UJyGuZ-xGU6t zm7Nl4=R`R}I`t!(8Cymh`ksZ;G@6YiYsL@z0|0VoFJmPq69;ObVXT`o6An26~gz%|gYv#@w9!0@q4F)QQyMF{hLxlsiz0B(Ht^mY|J zdKNMz%#DHoT|GLEgMNV;JGy!OVwL9ur7W$exN`2!!om_P?dSIqgF$z93OS2V|8@|| zL<#(nlkZ)>Z7(lFGW5BhtHu;E`X4jn+r2&=ii+7l+6-r(dIya|_YLpk;JYL5jUBsj zcfYLcSax~M+eay@*%r;F;b!k}tbOe-cx?x2`I{GdR?^4`ywt9~{_Uwf3?JhA<#1c= zQ1t?pL&Jh&CKoTb#Ics1s?Xd}@`1Cj$S(A@Xy3{j*Y1T=Jy%{%?Q9hk6eKP_3^dS? z7O!{T89RbNFvL~ruSo6PJLIf<+_LA=1K%W`kl>ax$mFkTE>Iu(IpOHGmqum*6a9le zX0(UzpPY7|7YB&#B7vG^3r1~6C++3KugHBnTTAu5=4LLVpRn~|xX}<==&`cY& zxf8jf&CHnmEgv2qn;IJ{tEy5{QUJfU9J#dJX0kX^H?bAV9xKZ7 zaB*?LE|C!sww#9$k@@fX=}%|{S#1sn#i@5+LRLs#gN4q*hQya}>ustzObksE-m57v zt$f(dU39!^efDM&|GE^P*Du*Y3m*$uN;%H0-`;@l3=AD4#GrO23+gjgv0RAjX^7}X z7Y|F!e}D@Htx2H_TO46*2fS`m-xY{O0uBml9DCnSx^8>zQVd>B6ope0`5(sNnYuw3 zA!36EZ#z!&o-fPR#DzJ*0l#fz`rDg`9?7GC$(^`OEU7m+sxP~(ukNU%sXH8fIM?gn zBDea(?FX(EOoJc!s@w<){b`WjP>;$*@SU4foLqe(d7+eK&d_gPA+|{eFnag)>2UuY~TIXIppg+BKuQmG1-1}+yC7Ssg6Vz*>Po4)+JAE z6a=O{i!9M%%SlVME8&B8>OWh#kb6;Ke1)pLBTdAHn&R&Onl+~(obvmy~fuMvNHG(j>qvHb#=ri0yZ}eNNFyEp$8?sojc8^I(FO)LADQZ17~c z0^QxKgkkg&yX8>TReaCS>r7P>+SHvFWdZvNEhXY3U%`bFL=Rxdm!i59N;BSXGMNGX z1(2;YXv8>;u3W?I`g?xpLb2f2cL3M#C^kuJ#M7wo(p z%3n#V`#9=q?A1&u#Tf2}xM0?U4jG%zr1_yu{6QSe{M-xGZT2<(WoGpXzgp3InvF5k zTb3?KWfoXLLupbTAOpIIi-$|6=6Ly$yd_l6)aT{-HGrqy2t~c}2x2|OOdyL}8HD(A zl_&n6emv*c6;Ju!zf-Ef_xqFVh*4gkGXa~ogzm4WrRXIatVdR$$IN5I zkZI~-c7g=%58Wtf5dO}!bAyt}RBrm3O>fG!zkb9i>Q9?)5z~3vsZE8YeDzw=!ZRp>hnVO=br_V`I1hIaPFD!7g47W7LI~@A@3KVVh0`ZH09h%|F zlxI8S=^#u>v!^eNBXhd*?IBE*Liqd58HPIz((z;b4_JhNg-!t*!qVm@o!{k~a*ZY# zWaJPD9~x`6EEYAc9j9KLiN8RMMZ^ zMj8u|q}8jjmc9Ab#7^l$X=27v)D$P{LDP~$X22{VV9CB>SU73`%isKFO-ToTG3U zU1IJncZf^1l3k$~x{jT(N;5gWFkX)mB-Mh%iZhe4f ztWm)8ayhjNL{(WC6%Eb#{TNZ3_Uwkr8Stp(^M9+?tP&X=G=TyEqn5(VL47qijWnWN zE@Nh9cHRwmb=qooDP;6L8c!~gN?iH%3*aZcmmbQ$cv#kBNmHq-s@mxDc=GxA`3S4x zfzaI3`}fwe2Pa6lV7K?8w|zYP-Vvi%Q6`NGpIf%= z7~jZZ;7XRIEu25T8~PmoaM*0!cSA9BcSm0nJ%M#0($593LR7Z4xA%YBkJPHs<%re_=?=*Qh2al{mZD)LkKHN^ zBa!pYkY6SsARtb0tISd>Q`FGZoJ>1+=N0iY+vG;MBV)5h?lFvnXJ(hrReAljyiAh& z_U4U_<&`yK$)m-}n@r#C_S5m$Fy^9plfc#7JuTSo^=7-x@3mH~rpB9)JvyV1mK-`O zX^^W-B_T~k==k`!eA(}|$BPu8B&BM)?(xrS;spsktK;y-AwGQKN=r zRsfS5c8v?CPaJX6f=eKvR%h++9-3)t=CH7kTs~hw0_{sH7=H5xocF|8xa$Z!W$)l0 zhx5-eE#$(qg3wn0L?fSLi?b!W+73y@`rh8J#Gp?ybY**cdS3Rt@1E(cG6nYl{4A)g z1y^IhKMBqqa~M1R5OU>KH# zJ@;pnC`pAxEN1)+>J?5Jj4k>*=+A$G4T@ET+L|QojNO0MQWl*Ek|>c_v}m00oQS(V z=yIjT!QtAQmX{I=Ag+oE7jRa1a2{CLCjpRb(Ix1Gyd-l0{Cz*oAJbyXvhv3D|87&l z(4#;?Y0V+&iPWr>&&w-hci$c|P3X58+%*Sa3$2@nMZ^Uc==w&H31b1wZytl+zy9n7 zA;st92Cle-rsTz#%Wm9SR(58sF(S zSZK}t^0@oMgR2RlHT#~N3nhs!wZAemZ`^ZQT3YfKnk@z#0Vm5Z0$U6w(bNIQz(3Ec zCP8!FKWXV$+T7~nO>n9v77x#OHvGK}&N+&%899G(I?EQV6!LP5AY4l7Sqh3+!MUTR zSbzh9MdwAW>k;udw|p-h$`kheNGU+!L<*h1-TlxH%w})|E?2!a$K;vdkdT3F$IjzX zJg4B&4{~D?*vdDqzIO!+3kg@&l#cmVv3lNp>~kClE@-ENj@l? zIUVOkO|7k%0P%10&GWElG13mSw0s|Ic66DckR0_1_q8d}FECtshZLXjm9@?qi&LBe0QM{?1$m4E@?lZaB z0-i5-yHcWV#alk7xz-XW#RxPg1wdehCF&z06Y#OQ+k4yV2mD_ z^9O}QBCR4)6}JppRxTaoa4u;s@AR$o-@ciH~@a@7b}F~nJHI!Yjq z$P0T#eHW@|2Nn&amibd2T(;+Rs0hC(XJB9(NQ!1nIkiu~a`S~j4e%wWGx|PDHl6y+ z9n<{XLq+V1qY95mS?h;Tvfl*kQz2hu=F8-jgOW7sI8#1INF;KJLSJtJuUl;I5T_;~Ga$K8 z5=>o2>v%)|~My$Yd;?22;zP`9Q?{JI%g<0#nDx9szKN_6G=MzVvS+_h# z!h4UDcG~-Kv)OF3l*T2dRKNgA&!cb2N8|)C~|)W4)m{*JFu9 zSX?|M%k*@*U`yw^OVBy|?`Buti}9At(&is*= zFJCK$=kEK0R!VY8sfI-vnq#RVl3RW(jHLJetU?sLN{IsFV&-amI_!u{QiQeQ$EoCy ztFBoqc{*_7`(OJkJuX8FX2Qhsv-r%y+m2kU5t5+{d?l{8mzUqYoLXWG;o}Cw!{2NG zYCnhRvJ7tcwL;jS{e%tqK-~-LCKoOZfrPCFRqyV{Z_M(q+I~p z{h~0xA-Y3!Qx>TeQLYsf)!fD1lDrC%LtJ}M=UnJ!vGW8K$ng9j^@N1A-e>^HiH#ESC75;e+YazM(*dsRG!)Js_?H0R0#Qt0IRv=n( zEx$W&E`BKMKHh-JkJ0!iX`)pi?Qt!>Q_Fu9?R0Dc3F3QyAmIj)tFwAVO-BDrBJ=y> z!-YXfRir0N{)EQPqcbmag?!vITm4zLWfsjj$ot5Ep@zd&;$T>>xEw7PCDS{PqOh#Y zT`<=sO08wL`L~ja$~SqFW_)P^kngUMkAe%+xi2rC zw4L+2RUSB^A+DCm%9X(R*dc zMfq6JULE1%Qb17doG&BH+e}c-T(`TL}O*<>g7%n>}yiD+n0~3X> zr!t{}zvkxVN#q>dYq##aAhOY|CnJ{uV(>*Y<| zW#f1}Z{~SoyV&MDjGc6Kz9;Me^KRqFm!Y|2GO4;Q$0g}IlGK)#micJg7F>U`2JKRw zDCUFfVHhKa7s$%bOshOlvJLx#?wFe!$EV-WM4wxeKdSnRu&S#f2Sp_J0DF)&zB_mJ z{vA*dE_D2gTf3H=du|=o6A&%IPJ3tl#)(n&g*IKCosv5syI{5koV){o$CDX3Y3ZN6 zZHz|pdNMF%fu$78Ect#nJm$!yXgWp}EU`%l^lXNb z7dKm^=r~PA&E@^@N={WBq-aog)qM}I1A)fxP2eYkP^{&D4$$8FJP>m(7XL4k?6KJMA@sW4R(+Q#G3hOwVMY~+ws0)F!7BKt#J zyT|2hQbYWHt5Jatmk!4}>RN>^%iRQ(m`Ahi=TwRhuNwD5vgoyr3qS%W5 z+%Gr?(1^Nbrt*`J!axhHvkbev8@ks)bvGP|cwG*j!aLK`G0T=<XYz!bgQy<^ugSJ?(FO)8+*^@ou)56hcIbseK)SDzLLBY4q*^*UCS*OwR`Vjd z_AAeTQ632MADm%ggEd;RjGEabg_6Q&9={_D2eZD6Qc74Gm&{*R5_OhDxnyucZQs&y zqGl|^s7SyEt=aSW*J*EGK#R~WRP$K1^!53R0(#3vWQY~3mT8%;ONuGZn3+p+7NLZ} z4M8Yw#vsex)%#6IMe6(>Ca6SmC{t~UC0GvOuH2rI(K%Wb_UoX$ z`KVl{G~2JU`T$TBknoy;tGKNV3j!Q*oEc#wP;%G@DJ4Cf(&;<#GfELVyR*OSHG&3G zZ`vQueqZ1&m^#-!GE>+6FzFQZq1Uc_hFs)3KJ9w*#QWQzNB5bVte>1DPY&H7A(~mz z@al}8Ern(pXUi&&wH=Kxk)H?$q^7#My1YDi@VhRwIT|YJ$%dYil2XP=IkbuxfE{ps zoMGf>XNL!0w-5Qo9QF9{Fl)an5xikSE%f*EQF;B4n{j{`|MMSu-Kp;n=b}`{td;1g z^f|uuD-{1>rAN9MPl#OX6z?2tZjr%vx5lbc*qJ6N)-q(Z19|p@e12zd!HDYab{`<7 zQ?A=1PeN&=ojZk|sn%{Vos4gpZQ3-qw6ruY=HTSit-;JY1=6PjTYc{{PXA!a!a~wu z*mekQq0hS^3c2)u*wP0zyOrwXR&?isz%;_q`++cMK0ZD!`!(XaF;y9O!OP3bf|+FQ z--gvQE6eM7d3oOm2$r_D1HPoFTb|pJ!eek78Y1;|V*vali6UmxKSvwZ+`?z!O~7(Q z$a%`3==fg=_&kGE0F1}wjqGEQB6x>Y9WQ_Tmw-FMT~q#_>FbDD46GGU=U@VC^&Na! zL(8>=1<;etZl9(cN^GyCQiY&Dmqy11sYxdDpZ)#)u}r;DH{m%&X8nXeUY}x{Mtr+_ zfwaY9$^kHkZtmzf29iBLd$WZ?M%I@Ez2OuIXl`8mHRyGsG$kaF@Y1M<4i|}x=NW1HS~x1_F&3PcBSkMxot-a z&z^Q@qD$Wck%})67paIhtq(Wi%Zs6ObZ67h5_*6CO$cP6YmkUM-A;4824#0z?6h26 zSsf$l&wuZvY?uOnLk3FPx3EBVc|9LOsbEaBrZ|-q88gKjDah(no zWK>ICkHr|lm65F~_}T&O^4RL2yyDrk9y68|`^|YGrDWA8=#R6~5aORde-=@ZemVa|STRTH_^49UKm{9c ziF21qQjT2WAQ-^H0^aj>Cw`Xl_KTuIuHliKBHE2zWl=>xA;SA^ z0NMoqup*U83CT&0jzljqvazWtgFz2!$n6r74J=+C}F&Cg2;KFP1jqG=l@z#KeaN5YvO+r&byBLrUCw zc7ZAbH1lAYysmU+3;Mgdk%Cne>}GYRsTuM|+L%YGBY1dVRe@J}u9%ctPNw_y0qR13UPq{J+Z>ecv;8Zv4~E^Zn{rVwfeN zRZ)uTP49!@XeEKoe3ne#+e08fS5U#q%Bs((6%Y`hqLQpxCE$7_ZEk+l?eiGn^yu3| z6!^9u3JJfsv{d%@HxSTqV+s)51w!h*~5vQ{Gh zAM421xzNxt;I#xr!$rJ@)(UO%?T-)#6i*r zATJ5b$O?;!RD__B@VR{+$Wi6xFoLwzhPEWEs4fgfv*0%QdUk*69T3TT)3E5y@#dj;Qhl#zy*r4gkiptYN=lVy2D zZI3)ZtyQ*|yBGda4`>Mp2-vpxKGdj*ICXj5LbZZ$H?7AZ*snK2wnJ1ez$W|j!@pi_ zb+GaAeN58THLu&Z2mOj@=)VEN=J@K-;bHsD)|qS1Lmgp$9v+{R8JlE9H@7DLfU7l@ zUzK3Jj}lbPo23fb^OhjimX;?M%T*zYNlPa)*~d=To*z|py&LoM#BG|kwii#kh}z<^ zg-hp?Q&Yh8uw7b8S+yMVk`Noa38bun#8IRZAwKYv$#KSl-l#$)kkW64=FBq3(yzzj z#bA#7N=iyn*46C{{NtO%-nsty{&-JZt0I|(zFkyZP0z`R$qz>jK1^1D#jV%t|K4aZ zb#Qp7V(X5*hmi=LwYLzxlOW2ItN6p6a`gUijH*yuVpgQ-^yH+FVZfPOrtn@ERd^zc z!%lhR!AE%y!I~>rvKN|5j~)|;RM{}N&OaXh9Y){|#c@arm?;TUWpM&2<0z>E8yg#I z%S@>ZdY!@_5IKlf2Vm-vuLp!abdDe@ig2p{z2ac@f+&~V{Cwm^4%~R}B7espvKuS7 zx)>{9#G#~nicfU!?(kbo;8?Qw=KygsCDP%rhl(NAT=1-Vha^OuhH+?wy=CEg`%?g6 zl7>D2y*z&Z+VHrss`${<#Xwt|+aEk|N(0(|N~&W5ubb{HXX6IK2S6exE30fo4AM-u zhJ+3#kYHI}St+U!>I%5AkW*Q4w1#y?B}_}ihs3ZCw+3@Dv_aE;`;kD194;~d8fv{EFJo>-^o-;m zOn%3Jjipo&pFG>&A8Zdb9v7d` z`@*MmL0=z{cE(&qzksVM2&Ui|tIl= z!P_P$c#M3kJl#wJYd9mxG88Jb2@HATgxl^V1U(18PIzH2}AmHzaErL0<6H;3!#MeDG1~FY!d^hJ8^@ z07#*I38*s&W8hGPSV<8mh(0?fI}JOrG!m_7JDT>v zEGNd%zLIb!>A>YE2qZ{_;6<{6`B)|@*Y_vBU?>gxNGEf%Z}Sjw#%i;v5Obs=>=@Ya`9&=tF2X3YOdAOK zWC6|iFp{JAs!5rsbzy%YJVSniFA>wYgTG&~5yQ$9#G8narj9e9bKT&0t|mDgA=-f5 z5Cwg*oFOuOM~fE)l@CU$9e9#1Geq@P9LgeyAuNunQ>J z6~zN#u@-&r)+^^x=iLLNCa0j7pkfd!L5h3=0qcjnK-EBqJ3y-k!-ef8#q+erW2em< z$!|w3y9~Mcze!8fqV27Eh_`hvhL91)>SFb_iY?gfi7G^cxI#&zz?W)V^SD?nab6Z z&n^kCm2Sv9v&w{P#7Hs8B8on1AEmj8mlfT44U+}d_?7tuO`>lYR-Ccl!ggxYqt3W< z70p@mS2Y6s>m-Y&#%X!i_2ZRJj(=n-By%i7>(`R>>?o^uQldXCYZ3)-6A@(RMz1uP3bN-=@-nXY3@Dpi6S8^Ie+PSc~ABagcmnK&V) zk)rH)$(E&cesi;Q;UYva?=V3lFfEf!h)OBv`q&d$1>K=V@_P5#)8EzBRdzPI@(-pP zM1Py{!tb3twJ};xatf=9_|oR)&#bJlP}#E^N13VVF+>4@8s47Xj*7~5_aE+i?swMj zo;5q#t=?f%JbTy|u#sVkry$yH>yrvS0uC6^ZS+QNWQJZQ{+^+w2)2{ufXC1xH7S(C zH3MVHCW=mg_j|8Fon1@BKuE1IcaBlLcF_WGrzaEGrgDI_VO%BNi&eVo7;`AI;T2?= zImVtZmw@Op5Tje!3eRS1lI?bk+;nKuF04s*fyZ<#ui9anNybQBwDq`lKy0UCr8T6G z^k0wIc=#??JKC~itohB{%8zUaBBQPoG{4viv(q30o3ZH(2PLJxnbLe?=!eqh| zVWFh-g$&hg+oDN`bk~m0OdBkkLT=7|@l4q_$B_e`V0QPiZ|Cxm5d#CIG&lVGZoo{! zm}aSUWQv+nETV|$aXedKs2$08YOLi)HWjYA^k}UMJ}I#7UaePFM&n?!4i(u`*HD1! ztB(Q^wqVMveI?ez(n_x9uj{ZZc&Gm!@@jUVik}c@Ctf{*yZy@^iI6 z!T}AbEXnBoYYgI!b7J8-Q@3TG-F~{X*lamd#FYSmv59BHx)JJ=5IcxAG%8-9z ztxF#qphc~T4IoW@*M|!GVIhWq2F9zC4jTz3T)D)8@(t(G73ul8RYGEHWSDY4yP&`^ zi@eAImiEWmN?4DAJaP*0&05Uqf z#*j-d=ux@r>WZnoE!fb6rK>KbWew&-2&yc#hk=yZSW9O8u5bMFM=aNup&MW1DG4T& z7jK_zVD^!eSB6Gh*~krsX=<8LqpAgtm&quk$iT>to0YcpWq52~nVE$~FHd-l?Wm5& z0-9H%^-w9>_5s&E^CLW&GROJ1ooE7x^k39)5MexzC!UnrpPIIk1JQ?mUbo&HJRXLk zrllODC;B#eBBxfO(U16J5&JZ&TKJ)Jib-W6!r(d(6ZN5z3K#B$B-oZ~#6ts93wEde z&p89ein5tynr$s@D;tr%>9y@&p%RA}9Z}(>EjBoifqho%F*E%%OpFicpclxEG@L_X ztH-l*3DKN(!fAv;n_Jhu$3>};mr(J#G33!5QyN}cZej*L>gt1wKeDU8aY{59m4Z3s zq@}Qp4q(;l=G+ZI%c2#|Wf7@!GQEuczzOm%d-1AU7Tz2p&yB_357N$m|1QUqkpGM$ z26T`NFtP})5d-tv>dhfPpR%>$`$om&)Qq}1xak%i{s{eu9NfZZE{Bnh*9`g`XYAR* zhWTx3mKrOoMR(RMKXQ$KcENj&eG$taR!0;2RrLNP6 z?eZ**zpgZ5QeuiLOTpCoe0(3-pq8YHLs#Tf;;L7AiOEt(=g0h(yS;V&CT2b^0RhwO z5Vq0|&;0KvJC1rj9YxP^nXvT5c{lE|LHihN>@x@#UDCo#W#RqVeW*j9yn=DJsOEbx zx>1!V9yd!^!uNe2&y`b0vQ3NFx`&T##Fpdd77TVo-rdW;>?GeSq)dC}T38&YJr?|p(*{?<5=YX8d=IC{nRk!Y-2W&iHdb96`VKypS z!`P2Jd6|M{xoET6oXzalU6=-}L+^t*S{{~W!|Sno+L-j6rpFt4?!06{FT(D1+aE_l zN@p!;ifjpJGwCX;j6U$OmE6P?8j-D1^ zpY)#3DP;1Ao-|o<`k24+2wxXGPmyBgXQ4C(%u&WrG{BIV#Ovm8e>5P|b@^R`#)=4( z;=wZu(}cz`UshuliI6G!!H45Sjyb(TB$b0&3yv|8=e#d3?3^Kc-`zD#=GxXUaycb) zn_RGpQvoVUrd87Mo$AMk2+bjkWPf2$8Y~{9IXOCgLJ>=+*qS0lyMm!Pj5Ejto}~qJ z(XAz8w(I~J2ps)XQQB#q`9N~f+{}UrE}U=5WVVmmk04yCdLSo^N@T7(bBsV%Fs}cu z?{A2GYg*DpKm#TQKhl$TSK%Rb{i|K2R3lD9AGdYih6DE3}|GGtU}i3fio zT!jBP7iz>-1up=)WGk?m{QVIrNG{v0i)jt-1f0EuOhP#41S3WroD_GXv*Auhw^7;Q z1X2PPnf;}Y&~kfmW+Qs-TisNv0gpvCg2|sI+1=g?`PlJ~TkFl?!V`SZVp~9Qgpt@m9%uhrzuSzjGkey~3 zCaN_W`jjCP8}+^0fEm9;M^{W~0A#mg&Fr%+$siCg(lqo^@ zar}obyNxxzw}Ah&N5I4`d-FH%9@@WNQ;S5Gt^}1AUvhO_p`^=2%{);_$6&m)th3G1 z5-=>KVChy*7uZVmVFYv29Cj%+8*vbqgUQCCyy3Phaf%!@%jfaeWf#e=0oMiPXArsp zn(*o7lF3$QiTisw-x7t|Po`EQH1==5N9?G>-j#CD9z0bdU|5~51#0Xui+tT4#C3iB z?imYwmz@skbNdA-nQ#-a4l>g7bj)1F1(Lz0tUAXPB^edl(W9Dbr68AE>u(H{SNbfs zQe@?!4sQOxj<<-6uZFQBl@xIBL!d<7hH)MuKDzXw0}iqTZPWgMQ1r51Lw_6fA;yjs z$x-pUJqU0fvhy|KUHeUhdL`LP1QT0#{>RQ^&WK1?)8^NxhS#5wN~Kt~j6oZ4fjLbe zHl0|6yrk?f(Gk&it*+SphEj(7ZCLH^=|#L;0!xCFcdMR6mPWWmvl2ovs;|h%cm27= zr@Ww^*Ey)|#@$}u`EtHUootzjb&VfgAd?4>RR~a3_94@g{v~o8g%F0n<}G7c0@i%S zsQ%=U@!|EBlosSXnGMAg4{jZ8HeW;udX-3I)UJvLt=+W<&ans(@W2TOd;WY>fBt-) z+}fqo#>%yku{D}P8|(Zl9ecSjT8L;3NUfQoR(-WxCUAHmV7K|DEO~#(18?yB(!6n? zdJmPsg>Hh1LpNFdaS{KXC}cFyG>n$7*W)sgT>r-nY_42-s`v)c7#ywREF0g@*0*M5?zPn=Pv>1fOcxv%PiFM-N!s@~skC4o8dUaPKXc_Va;a)w zi@#^_W^H|{E*f0{TCzu3;+Lv#50&?%`}Itb{)lyi9s57XR=Zt3HI3SZ7P@~@HXjy3 z-}G%8y^h}NUG-AFrxKghod>~MUJhH6*_ST9+V%cA-zwAE6khH=qno>dg0KQD?YPID zb2*b!>eYSR)T&BgM_Os+Ino(gWt{r@lniMQBE2(NZXSdL6Zy$gDuMAf+P9Nx70W)r z{Ij+W6Y1qO=beF#{QMi*d`;`j*S9p*vzj@-t3O#xM;nf%AAea?pr}RR*H0N~_V zI35mSe}$IOby<;6)cKH>` z%wG%<**WGhj&)Hu;EWc2>_dWYr^|h0v$pca;VtUp(k6x5NV$$Cf!`7;CDiaCM3<7O zG3`=))ok4&>0=7rjoqZk-zIWZ9$MeZPR3Qj%Kt_wlJ(tfHcsn$(Br14!X+wXc(IiII>UcW8#+%BAC8e}~AhrHNO|5WcMk#O&kO0pNPO>uN+`BZ+ z4?b^V9TS9#o@UeKrWNIZxC=cVg_ zX(VV?RcsJJgR>t&s|xvT$wbLjcq1JZQ*vM$OfEK$IXnCsb)xleX!y%eMZz)3T({}7 zCw)p(a!h}?!snt0ev|5iB!R;2%#%Y2s8g+&EhQEC=_j5*mrJ0qM;lAgS!{p3zMw<0 zSe>6gQ3>_|Yiij=hyr%22I~j6#N{CHi$50{>US3qr;I$VHs@8JXn(O`--f%`tWaPL zZ|9;n@Q)@HEsG-_GV!=V20E+kygWtc^`ViSxz+0A{KW1JH!n?Ar9U66z`*vI(YSW- zsDCs)OnHDykB^qSJHJnEh2gur$?-WXd~A9i$$Xth=OMsCG*{sd%GE5pwRd99CKC#~ zS9~KHxHERR-PMh3EfudGS8C^4OcMBXNOI{8d}d0c9+21O3V~;&#uy8qfm*UHZ ztZDR5B4-%+mPTU+OCR#4EvEDKVrydl=NXK=u1 zt0!H?f@L3}{1&>-lATJXmC^PWsnk&S2ujhoQ=dr9t(!r@^nw5L>ABUzgPpKqt;2Y~ zvx&3|H9xlU%wK>_1cHLa!ivY?_5_PDp`m2ZWREAI&@dY zpkvj`%#>V*FBXrOs>eSEvX{LOoZOx(I_wt_Xxbmcg$H38GGlAU-#v1CNIqM05qC+M z(lTKGig}8RsuSoNiob8 z=hSw((;A#^G^epA6e;Kw$kznXx9Or zWnAl`5)W5Nwvv8e@U)60iVinV%=Bfs__?Y&hiGixA-9)~HQenp_VK#C7rrTuhAVp*Ze5psJ{n-`VD_MeR;OKuFQK~KVN*wYV{BY% zW_Iyx1>rAdbgE{_^?`{V#*db^M3@RwBGyD3a$%NrI}e>4e9skZWBGu@HJWn?Sc)+w zjt@BkjezE+Y#hp$$H-GUQ zmG>e-Ct95(=<|mrFQ5hkFeu|K3zMxYW6h;u*4^biP(JvsE7$?N(xeVAqDjL{JCCX? z<*PM4f8WvYO_mEBI`vDP+M=fP7o^{k`9&)xzehuptv&WXZ*_eAmjA~O+yPrznEvWe zA*5EPhxjl2_dC_27Qgd=ZGg>6vV7-`vQ5jAYF%}`1I)tMk~uB!MS@O(<^744C7y7n zKRhT-GMXX2gPg#cHA$H63M4LN?L5*3AdlDH+ohjRC#MtF1S8^pXzF<}Hv*TqXdZa4 zyzMDx;3N!607yfb=OFXKIgRGeodogaPl^dEbk{@T|I(=r*y&v>?z zAoPN`-0GA232~+XBM1Rnovn`e)t>4FU;EvMVV2j@BpSvSWZ?0A_x8n~yEf;z=g56K zAK%?`kR%9!=U2xs+mwE#oCrV(SDj_U2BX#Ib6(n-T@W~fIwmddO0b%=wIq`qu_h&I z6~3Amb3-6J6kz(HpighRJF$5g=KN~XR22VUe*7JPX?_2zP5p0$SSL;CHMDtlGd%g2 z`vvUPXLZ@C<9ik^x{@AmR;3{6_vWsl2YIb_DSTjM z{1T)b<`~VH3U8=AoSVNWJ|Tl)g5?LdCMISYjFw9mola)(aspk7G;wDRDv+jc6B;#X)X^*_xP9TJ zdGU|myVREE{Au;iUTJ!VQ}KYNC+y3M$ohKG7jMhjj70hagFmVKHOKS6U-fT5Ejmd! z9Ewj!7sIh?U92tH<8fTt=#-}I3fC6=DcW3A)%E8dS9z}Omh_k_!=lv)vuD&XpaM{+ zr(>6Ae7_{=p_ZYoFIQgU3^aquX4k$PK{-4@Xjf+ZP($lIq3)!J6%?UflK#Ce=RS(k zph0__2U#IZs6J(9y`lC{wsfjNAk4S}%$b2TL7Jf{Z3Zvx3jfIg9E3=v>N6&%9C5&f zC%`5|8h(85vh^$VuXn!m?7Oc3f=0E0VFNrNd@28)$4VZK(uo@&zSp+>-;O?A?`$&D zrZ!J^wlxhbZnZ`Y4s^xDCi6V!al2B}@-FRoCntn*V{Z*G122`YvHRiOGSJ-i(cGrJ13qXD9(EB>}<-)5%(S0xFRh!)=UUQnB_vOieWjH z;aIR5Bc2t*!N=ryhLwJE94lT3;ys)YX2d&hUzPnYH>Wia2k+edr#gGHNo_P~jCk&v zlnoE(Kd>~e46o?&_C8tt$Cq2)V0b1%V|`-bchW7V56;RjS{CqodwWh9jpot?t0{Wc zOsr4mG%fU7=I|Ne%}ppDhV@$YX{)n;IxqHyy53jzG(YZV z1}>EGM~DMXgzmm2`;Z6uqfY0(9rfR``x_;5f|yIyGX7~=;+o83dpvFjNl_pwy|@|O z1~J_0u#@31Pm=ON5`sFtW?J4mPZ}!{I02O`FJUG*aVDk^4u@I4inN&8R8_yN`on>q z<1i)hgSXg2&c_x$@`K_>BwL?-vEh~fI`QZ3U_Z)i)5ZLH`H!zo{$$07&*v)tc#Br2 z2S(GgiZZiGE^Y2ag@$?Wh#e*mD)V5_|Uk?8%Xgwmuhtj_v>EFXCH!~;zOZ^PQV zfPRSp58a@NG3$~fcP&U$x-RFzKJPJ;CSI8P2_F-MJBk;q9oyA+e*0&q-ruP<8syy= z&uDZ)S_dbcUnFe}LWpM=k)*f}4Z#J2Q4zMdZ{GSs((%_DKLAsjG~&>%pY;=J^+WUT z|1x={$`L%qw>(k)tAl-&lKUkrOI`Wo(jR5=u`oA>w_UEUJycM%%od-EplyR|C@W7f9MHz%qd;ToH9y3K<~lgY#Dgx zXvcG)`31>e$+O*2)BBPy)ca|TTZ*F(;SjCXuyC2xx?s=`#sUnvP>AvR&N__kw97vH z?4Y7Z#>zh~k!s4CJH@@Tu zIsx#+n3VeyZ@9WOq5r#o(%yVc(z<15yj3n73;~)Vm}qshEz#?9UGnIhK$(Vkfh|jZ zWOeovFpWN_eYm0T6=_o%%dF2&lQz$mS0@NyWgQ&}2WaF(PdI0%hPKuB{X^Q#f!x{f zt<f?JBEZjiT8tH&Hil8Xfumd!Ku)&~O zpmHAj;@g|pfAqa3*n?)Zi4$Ohav_?3px}3P`Q$)6?uuXMbmV!(d;hR%iA&2dB9utibbZAV3O4YGFyncOUp^+|He+ zJ~9zn6{!vIAzM_URb$x@$XWJ_j=sKzh@ap8@22<4+sa9vSe&usmvLY1|G$53+kGJC zhhKhYjrW)KXM*qf!d&?N?A!iN(dUtPUg6T?M|O9#)kFE^#e#}Z@71) zejjCioY`tY__S(DO>1LqDL${;V2T*%?@UQAm~spPxa9mnlQ|;&)@uywO9z(3JmuND zt8S-RZGiU^Aeej8Z(6&Pd^>TT_N}RaCMHzL8d|)9S=zXKN?&3ye-eTrZ{?xh)$3r-vrA z>vMj!Ao@@Xgi(zO`3#j3!Yn%@dKkK z4#>-myKQgFk9F!OiqH_m#kl_&T0JLs(X`7haK1o3+ZIXamo( zCbcolGeMGlwD1e7f790XzwecO=c`>m%=)qWz4AlTFy0vV;djYjCw zL!2)t#gatT$+@A;H{|{%HFB*d*tMnhOC8RA5@n79Lx%G$NPf86b7;U*J)OO-L9`mm z#PXqWH$+fVhMK;=BhBlIo|oqwm8E#0d&q2#8XD|A*;196 zRT2}MG_K3Zg~B?4j=yo^$(s`1PV7C{^Fg57t)Vnpf)0~{n+PPwq&#T8X2EYy4IZx6 zz3}D#E#v-K_a82wQ%~!BL~v#1s)r7yx_+^XKv@w|p5XoB{He2LM?zc2lf z;l+yA-}uqSm;TFOi$*snp1*e1xA?ly=mbrcr9EQzHCD9!UPBwhtS2RM-PQTOx9Cy_ zJhkuFe$no)kypBntD=C~vXp-zyQp4Q#YB^c327`|jQEL5EP{(Oeo)>07gw-tTrXQk zM>Gz+Szx~>E9N@!Pj%Fa%pa&Se=y)VUfJ=7#{M^@SnNe4p-`Z)zG8mahMKDV>6t~% z4V4yaj7Fm!4b4C(HaSiE$i}}Ep4`*@x~e6tqjYACDaeF415q4NlJAIET@gY3^<8^T z+{aHZdM)^dr((!R8?}@+sOE2rzwVY-)q(eRIe)O>PX)EDT`fjZ7Z#YMF=h7^-Ig_I z>3QUZE$@9`N==siu*|Gtk{}(9exuQ%(daH!bV8rTn-|6yip$%c3bO9`2@kEy{S`&3 zdz^>fu6Z!P^lPZmzPT7SRA_##^b_*!{?<+ttyf9&iM*`8EP3Jm&NB0}Ri1r^+;&IO*Y5tG z&5jSc-!btzi`wjC{jre=_X(>O{_K>7Qg{CGmS1>Y_7AvBQVkP=>Zhw7&-dH@`Oxis z_4V4Q2ugc;XMUqO>f^odgu;F_N^Zf@N8;B6~^BiYc2&5;`7$Q zZCmQT8s=PMhSxsMy{ILvv}q|WZIZ+Gq;X~l*)FR3DL zoBuYxV!5zh9hDPv^NFs%aD>ctoX2x7&(Ivx48t_(06n@bO z+~JJOVz0-UoR;gf_rpOR$yJQsuQ8bye(nMH?FCNoQ(g5iBIRDLsH*G!;!Ts?g$L7MSTcck(`4=t}(u!SF zaE4r0rLE5vY;QgIrM|`nO@xJKKH0mkwrXE`RuMoM40w-J?1+qtmtU#F>0l$Ta*U77tjE_z*+yPFS+Gd4!7 zLjnXF2HxNW_PXM~$id6>=qpxb{iMG4RZqAZJ!B*!QiR&a^#AkNX1lK;%=uzF3pW+M zxHSE-x2x|`U91ur6^|e3B5tIL3AsHvS6{i|H$Mp##oe|2Uw~jEt>*+Tq+*g{Qm;2I zU-fRV@tLQ?OrZ4MJ3QZ5{kY@h=2HzuS{@$?eqrI~@BcWl`Psik{r)SDhW^xEdlHnX zCeG*&{oixz z<-B>*9pq303>|_3ilDM8=8Bjo7}&b5t}ZLO=Gxd|p%{pYEg&u33?0LC$Lm|?{=e_s zH^YF4{CCk+cdpOj#l7d;_?@p~$M!Wz$yvWAbm~UXE_l1AUE2D~ot1L{n#|jFR31ur zUR-}+O)hS?}8995Gkje0g!d@w#LZ*k2n2kSjXvEaU;r_R{TcNGmcoWMf(fG z;ea4YAoAE9uIzT*03w<{+<(f|uD@UKaP_B)K3#GkaL^?=6kX-*^0gV~4PPcUezbJw zrp=zjq(1lG_3@yZclJJRDk?xzHPnC^xwyv#6IW-gyZ7<#A56c?oK;?36f3$+j)e8_ zkd*$H_qud++@LKF%qaZu6Pq`-wJ2c)Y1r+KveG>nnVnQ6Twc1jSKkpX*NKVI`4!L! zBBMXi)%}!C4=2SODkolCzjXf2n;0~YVX;Gi?yjB_P%19!`&El(Q|aHhuJ{>Qaskym zs(lH@ltg=LTfxTSR}VJMug5&}*3+RgU1%n~Ai}CNuz1g3>{0^%3m5D9cTGyX-RTx2 zDI5xH+q!JPpfdrQAZrf1;|5xgb=LQnA806YOD?-;4=BOp*pxe6=f~f>bk~yQ22Zm4 z_osJ_zAs_fy27=fdyOUA}{PU#yjOQ0F+qN}*Kws~m{1xZAW;VVXDr$@oogqEskvtC#ymv&T z)7mTVi|Fb(bKaQUZs(dME8}e_aQjqWS8vCshy8Q=({HVMFgn$zJb+ zhI(c3?!N-2M|6H9DJI`3C;1|!N40u_&>8RSa-eR(&Z>{9d>d0^2cFyW{T>;Ytvv9^ z@l@=_eF*oP-RkQq)~))cYyJ=r@*nJrcf5N1!iKf~DtUi>*=EV)oub{R`SU!To*O#7S7LXwA=LAsn|kq-~NCrONz&mYs_l5xBwp$AtIYHQ1O?_RH{k-kGtPfCcITI*`dw`^RR zn3z^xw#OTn)T8I{-vK(Af-G(P|AFD=NL?3Pnh z8X~{vw#p#qRg~>>$HX<%RaI9Wgg1Fz`!}h+Is3nilVW8~?3LW_vBCFsijB(Xj=0zl zi@vyH%{1LKoPymXT$AEEC2i<4CrwXtB9SYxH{I))yK>oTRa1DLfT)`3N}JOAva7rP z+0rRvb6c6)IBx6Gm41J%zo}u@>(j@bcYXT~J>iu0?%vd^&nfWKtiVkZzu0zpO>m1{!iJM!z3!{+ zlWbzlF|-!bq%FatvfwHAtqks~LT%j${g&zC&o6jFy7xTkNMnehpOt;u`R&j2%AU-a zbh~g!;6C6heqhbxz{6aE9RM2AB4_80eQL-9ZV6TOZS^~ESpL@?O?zS_H%~apl>Xd# z{LMWlr8`r8N+%mVb|TLUeqa4}U%de+tT80fJ?XE0|BxGSp+iMAOtGTK#d0hNj3n{YnYX z3BOJ6`TyHv6bbo!wXt!@GAn?c=!k!0(7i|9b6efcsz{yJ<_YT&f#d(u`-a4XRbjF&ZCpVV8WVd|ie5>Do);khapIf&+ z;s5`OMB@GsTSfVSo!eJQl1)?9{N5)WyVh`r*jyVg*M%Fp#CE*D?`>nUM_4!V#qDqY zbJKG`iJhV&qAMx(q_;*q+cmD!5r>07xoO?^yLYYkH`ReMUeIsUQD^C%Ke%wq4**%G zJEl*+k-w*|2B0{5?AhBZKip9Ayc`YIY}@`_v$3x3-?M4Z&~Xlj+wX7OykXJcp{YNv z(+NKufeCJ07+}ofwOz3!?l~k!2+C6I@d29EFz}z)cZ&ZB}ksclJw(MsO-%_*?RFo=xNB?5Vmxtx^@9frVcFR1E zY3K7=eyR!A-n`=e1r^IZvRl!WuHH^vyq(5ok322wkd{rUv8!>V*jXHhe;j*tOiU?mc_lrBw{8E?2Dof&sH>|j z1LdQtvIt}yAXKe)SXjFJt~JxkLzOAcq^0Gnb~f(oo7ltpsWebAY3c17YPZD7F+n}t z&D;6IQ(yMlj|?XOxUXCDE$BUIY1w{XlR=GU`BG?Xth3u)nb}7qW)N>&%ATF;Yimm2 zWV-ek%nQQr37u`YJYkGT5b}Es+q8aRM2R>Zu7dujwj@Tv_S%kF4{UfE1bw&Y@@alX z8r!!h?^i9p4b*ecffPfDm13SA{0|G7^|j^Y<@?h!IoZapoGj38-Q(bPm?jOJZ zR7LrItKK$7ymQ=;VdG-GM>^1VZC|6Pk)8!38XIfYt@>ujus{7SqmSFR|9k^*oIL8n zV9@V6Jn!+@t*<`1d4|lwUYk^3XK#mx`rl&(d2FcJdgJnY4+M*2WLHFwI0XBQp^x@R z=n6lrTl3AzrSqB^YR(*gorO-=l9IFF1#fH)XCxAI*oh#?ni?8D;{0BHMjUZIl+yb8 zn!!WQ0G94@#|C`$4fU0Y$=N4nHMTwP-`8ds8l@&c)4*aMy7lE}MPEO<`2~rWb!tdN zyubIYUyYeHG!=6^szWtbExvVo<4%EyjfyY97WcxiM@MF2dGAdd7ccsDHb?lu!_V%V z*Z0SBojmgV)5c89&gl~LH^j%Mbvs&7a8QP1Ner;EohGHBuwRn@aGeO-w&R1QzG?lU z9=(QvzM?4MojX<+6pSQ1KYQP2b&-ZNM@qaL_dvfp&TcoR<&YRTW^%Vn7niT{X@UMp zy{_tVac)dBTP-0Wb-<7_GBP`L%Ehy2`wmF$l-D;iH!rVC|D)FK0wpLtv!fNP zL`^e2qr;C`e;YdgC$>m9V8acGlhYZaM#9K>oiW#Sy`ooKw_&M+y2f`(upegbaftTo zx?cgWAE&csWp~NS{`uTt* zV|_T}2Sf(^^*~A`78`$Z`XG4yoMw6y-4yf~g7{1PsT^NW;Ts!jl2eW)N9MNA*EF@P zWN%evQG8-r=PvztUT8z-|J)`?wsswRfnF@ic3q2f={{Ke&kDYU0!_8GWgR;gIGsnY zEd$zj%+EN@u^^+a>!xYgY@QR_Y+$#ts56 z0G&QIQQo_ILw#*22(KAg9ZsyC-Gm`}`7vx1sa*v{7o5 zmh1*)NDzedtd2I@VUD6;z*kTh$U3`nJRY1_z%}W=4_g+$B#>A`dZ_SRk7p`7B|NTEt zyt_l^L)|cZO||ppzQFUm%jG%yyc=7ibN8+d^X9(jbhQF@<5Oc}6E$6Ft!RV( zzJKrL%*>98656|G(-E>Gs8dID=OCExCwe^box1cpBIan%&UMMj>2S!-?Q0J^1h6dd z`Mrj_oSwbAH@0T)`}S-$46SpQ{&_tHoxsa&L+9@epM(JC1dLg4;8wi^Dood{+A(y@_0gU+_CZTl~7CtzuY!zi0KHa0djHNl&bl9KZB za=+gn3mt4GoH- zw4w0dN9X?i`!{diY(1f(q9S1O3BVL?_tQ^54bX&dEY$AZ zyLao>t=1tmH8o3@F8%V$FI$gaRaLcW)hbn0;e8+w*s)^=91ECRw{G3Rg9i-*^#ge1 zn>K9%tiWl&{%hB+g(u+2Zs0Ech~oS6jV$H5>@<;q+FnTv=RP4DUB?+z7L@%(#5{ z@=rhg6y5-2SFBiJtwY!!?f`rPgTP6`MeW+P3(kkbLdHJ$5@v@b4MSNg4K50<-J17* zeES&z7H;LddGiE8u-R;0uXpa;x$qtc#>pq2{Px>#4<0<&Znwie08Mzbk|ZT2CPpHW z)YQ~Hd-fzGBmf$|_~HvV1itLuyZ8I=zwdN9;c2yu4^r)i( z&;8haWl|4mh9g-Mi13GY58t6F%pha|E`*HNwgP{7slJ0pRk%+a`IMEF!9*}AtR>ia;lhQt-g>Jn%dK-K0KRaSU~t$U?h@=jdGh4% zzyBT<$;62h0dsI$;6gGoG61YM-ET>Xcx(p_8~{K7EZ|WAF#sf8ef8CV;Fj@$gaBNwy6P$*7(f>RDCeDb9>4}%w3nqmffU?58Sy@>C5$mx5lHiSnY`_7G3`F#uciw^30_cPR0r%F*>DRB{b=O@7 z*RpTlzOG%n!r(wMEt?383GXLOngrj&o`57+dvM7xFSFpNFbhC)%9JTrUU?<#4_JrO zgJG@NTi>o8J$j57F#^7Xl?jW`qQ0=5b=FyMi(nQw&w&F6jvqfhGcyxb4vfHh^r~>B z@FiR<;2w^JRgs&UYf<_(+WC`PT3Xur_3Hr{a5n*Y055w_8U!p4 z=nd=%4-dYFDd3GYJN$)1fa<``fZ#4&x+Etj1APVB1Cs)b0Aa9HV4VORh4T?bv2*9n za7FOZ!WMi9v%@%WVnC|9b?XLe3D`Zr)S~gQ8yp1`ZqcGeaOP*6aR%(!v13OI*08mv zoq$@(HlVNV+O?~$uC{JVi*RWn(%P)^H`xXsVLJE=*8+DNP7esGDE_benFU}U$M_jY zBiva)!+-$;0IBdEfYP^bUjP#z0O$eSL5oDeiU%A3Z-wsxk?_dji2|Ji`T-29PoF-3 zPS^ne+Oua*V9nO}fF3v&U@>moIAFo>q+v!3{&qNk$idU?)vFgk0Uj985*Q6;f$?D< zH~|<0_6G>U_ds&sC?MM~3jh>mhlOOxb^thd0mDS9+m_Q4p$xJL_8nEHn=VzuCQ9H z%YoB|Z{Szh8Lk)38NP%wfx+QD%m}9q`@mIOj0Ly>91aAvHT3@nx8JBm2}D4UH32kZ z$BqR!{+d(6@&lOQM@PFAs=HZpU&E^@fy*3M4r8p?Z6O$v>IP8zv7SP&;&L3}- zSg4}x#Yj7b-y(LbL>|nly?Ff@BgX8={dvjEZut;P>xA$cTa!NU${|kGFvm(;}tV8}Ud2 z-nO-&6G3Az3deI63m4#z!4re^gF8g#HO^@8snvB&HI0F)hHzy~xG@k8h4n}zVi*Rc zR1ie?&nfdBx6R|WrzJa+VjW2daVd$OI6L2JD4nAk$H^QK42yC`OWU{c_BPJ`qfKYv zKx|Tz@D`6nFu^}%b-o?@>bCAJ*|Dc)XK6!aeV`!_4rqp=GeHztyohwxq=!f?Powzb zIY|^;HaXGb$c>Xa=4N#3kdWUYqf7h5l-L*xh61ICNgm}-CPB1qZM5?UbRrlH9yu&V ze$)k(4LeGgZaBDh^Pb(swdIYPV%Ry+&PfuoUkS7$6JMa%050`rRVk_#nIfk#2?2ly zmnk4_4S=A|DIv}XJ47QZA*OSO%ppC~hxN_v-7(#5vvG$ssG=zN1Hq?BzY}--*Wu@QXVmOg-qR5K^#T}_Y*#NviQHfz{6Vh2WtjP!; z)8vr=Mklo9H<`j^iJKH=r<%cOlv4vv+31`RGpc`=(I@p7nxE>D<>qX1hILEcXtutY z)+ytlZT$a_flf=^Vb7KQ5A!mu9QZegmq7fOjIn-a>1Xpd&s(y8TUo#mB+lg|vM6wr znphr^@Ss-=?6Pblh)k-gT38J=1p;+Vk*a#FtU6d#>#J!9R|mto zW^$qf!Ri3W>YOeBu9;zppg0iHxJWqBrJp{i!_2)>N zJL8WacfzxW=O48~GPa9CrlRPd&fhX)?yBXxs!YktJ7Nj1Qz6W_r^Fc|r+}Ck21F)! zF}vlE5D~?T$p$+J?}s@~XWh4eJZbH}9$0U0&x4=^XFi zoNh+D4Q5Y8;z)Iw3kD@Vd}{CH>&_o^=Fo0@RQiZ6G0N(&x0UewBcRi=v9qoWz@~YD zM>YJ@`J0}ewRq_sKWC5QoHo#F;9CQUrAR@2@%uzB+$q(4O0S$@13LHXo|&7LARQ^^ z(dG(O{7+nlMci6EPKT_d0o~YFTC;IO(V~r|%Qlx3*G3FpCT_bRn+6bS({A!8zjC3F zq&AEg(C*F&BTntxju`<|j@nF=4-B5ParQq9IzeB?$0@AXyzjBszWH*!&#=W1mrS@Y z;*8h4sZhdDtcvRz;U7&tLC{l0Vux#gmP*G(Aaw%dRa@NI_C-y1p&hA9Cl zB`W6vVnRR@=BJCc{N=@kyUR5$HeN(Js!_CUid-PzGy`J?wZCqB-{JkcNl|XBGJXwU z(upZE3q9Zop~Ru;Zb`3vt4WE0Tpsg(xmKMhuz&~*gO((MLomtGwvr^fMOtv~$0i=V&r=|;_!$~hbY)p(?0f)Nf#hX0&_?QfoN%20gRaGb_) zi0SRbG75=QFo|U)C8mb|U=2P*K}a=f1G=s$X|WE6O`>R-LX*$uE4NlQ8Xku*ynA+P zlE*+-5ZXhV6L2GdW5KjhTr`FlCGCcZAeF3X;Qt86eYdo5#=9#QY^tGdC-3HY9i&ZA z@(tRgdAZOXR}8vq!f;8J6sm|k$jziR*xR<>EIKV_OVAi8i0gJ1PkrRmRlDoCxD4Rq zJQv}JYyf2p)tu5J?%pd$pE{r`LvzRkU4&{x0N~0j{=+a#w6}{UH2`&{DKd_}y}0(9 zRXbL!J5W^7R2?*f^%alYdj7R%_XXGi@dILf>f~n@t*wIrzkcr0F(>s_DbQY`aQbT> zElY`yAJn&fW_*klasq(nDc`Itk*HK^vN%0-Z1Nh_-}`pU({F#jX@7wCCYutfLFo1b z)=*z_&VZCB{(4b|v^a~hbCw&njeee>?H4eKz*DEFw(vZ#cX8I2t8aViiyFhlCnTC2 zKvJgEX*T+D;^{rtjJWKap>|BnHJFxSHwXv|q$tfh5#U5a}QS`a{}3Uitcs zZwl*uFc^%_b9Rwy@D&!7b6j7OGWQTVL)}~)Xf2A(8_TgWn5g>H1s`~Madm*pNpp_u zoAJ~g=fyfjG;l^W8-q!z08jyltc6o*YB0m)WBZ&vwDXG}tbFqQm9-HkamN8eFyRza zlRw?qSa{uYFaGtyQ3JaWY8t%Bq}jIZw~EdvQwOSJa`(UR$&<6z8}1C*X_|&g1<6n~ zE?7NbM8^kjI3qVT-n7I*6akrEkOD*u0bosl*zwE|Z!(Dv6`015Hu3J4zgSz%xzg-* z--A-NY$o9q zk!nVqXHQT$_b;;^yYciX=MO_M2Ct>f%=BADCyIrF;E$*`PM`hu!hIw@TLkt9Dmm{m zg7ulU;PkuCyyC2Z9FRU!V?J?WJx+|AV>D7R%q=CgZ_JwCvs2oXi$}KT`!9U3=!-Qq zd_qFNV)#$uZpVbAHHFn6%I|B#edeg073 z_llvx3#0=ZF`Q_=2YEqi2mab{fmM`vyHH%6Yi^FmoR zbra2@%|x_K68$$f{y&FiG^>Jw1_L@t!##qjLg$ z;n;Pc0sdLLv8<{N=y+)Kpe`<1VyH9>v|L4R4M-Q%0BBM;Q88*$Fh=%i|LyZvT+ly7 zYpj5C;^9(EU5HP6Vcwp})7}j#22XU;)S@?tw!!SbgwCk>1$7Zo6lH+srMJEM{jLz7 z6i-N)@Pc9Jj!^Y;Q%Ajc_k~Uy2$p)Yr=3mBPyhrIC@w*88$dv_Q(`Y1o6q@bOwses zXRCFrnJDlgkp&UyAT@O?FQ~`H*d4Mn(IvU#BreHWQeDv$#=%uh4{M;DXo4h&qF~Xj zMXPpFbWN(`hvjA^xB)T6#SH+P1sjWjf7m4dDTA<}mw|Gp%(O7e-fw_z2P?@WfOkt0 zMZ2kK=xGU#x1YH9j*I$`hAL`Ggo4zoa!GM-F5Z95-`~|Vk>{mDwu`pyzk*I7Y8^*Y zVx2F1#XU0@?F|cFFK328Y%n5vf>!a~eP`To$;kvmeR&cV= zA;Z}_FO!RUML|o`nO6!$&;8{!TlW?7#Kt1_btc5ZDT=_l?E-y#>e#1m93=$IlKR@-xnb$w`k!FCZt^#noWhDP; zNFEpThdIa0FV-U`7KPIW=5is0xV(?Pw`S4C5|Ac4W~JmLxjSX2a=O_VB>Rf05b&CA z>Okj2hX{bg3*33Ic587HoNKR6sj)6syG$?aBd!O4S4Cki#$rT8i7SLuXFOa4r6-TIHj7i$E;bu+lmYVT0697yCM0RoJt#g z-20!efw{7i>@%ld&@D;h{B=zc@tv>t-v9LSSKr-Gd@v*h{eAO11$m%yX&}W8%unsz z-rhCSYm;P{cj5BQNOTDu)*G9nb;yiOisi$mv86m>2vU;UKCD+KCS`zR3V0U2Ubf+s z$y4_tlnCU`%o%Uo&^t}my|IFe&mbfMyXb}-uUEbI zz(pha!Xu|5&?5o%1g!!I8F0_L9{>26x!b8bJ~xG%_2BrSU9%cOdXEWDSBA9#1zqu( z^M*lrnJ1V3sn5cVpVL^+yWefQ;i3^K9x|w)!;;r-ob%<{r5j7i8x>9zvy)u?I(UZ^ zbjt6ZZ4-HFs$H_tZI*EMCrDN`nJNR@d`YSrV>YA?yGLKNfeWS0JB8vT2;hZo{r!%QQ$C>G?ztl7AY zGh(@rIC5YCa|X!YuiNpLXTMmtFT{J&pHY=c%rBRY_SetO~yW1*==dr8=I=v3HS(J=ShO+^Q*d-urpx*QHk zY6^tD|8{xzj`3sqwaf34MOp15gRx~iG>5)NV>+!YJIb8(d^3hvMy06_ z>6gjKPck?sf6*qb~r`OcN8OgEF-+6Xwg8T0;eZR9xv)Q$K zCXUQVbl~L3soBCtGRmSzab>7DpKcEB+rGZKcGcGXoWpJcKt)G+wNhJMJnocy!34z# z{Z_mcdDG@fIu3eh9yeoWiMeQKG0<_%i+`W-`2({GC7^|-gmxld-BqV{diA~wcnd

9oBy&m@FfyXLYnC*&qw#+tmF+5&XLo4 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 -n5|b-lm|M4Xv!_o_OMDXO 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 IM6N<$g6P-dX8-^I delta 56853 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%0Aau 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≶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 delta 6157 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%0AVe*0vN1>P;zo}V{apy{dqFe?s{&n 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 WgUQh01pYe!h?JPTXtl6m;Qs+U6~E^I delta 6261 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 z zO!~m_&WyjVx))Hs7n33O8EDwPUu|Dh)MZAe z^-OzLwyA91vWv^c-ZI*%$bAv_k0MXiE7cC5nY0j?^lh@NbTGsgXs*9>p3bZyERj@G z^D(ftWHBT&hq`=daNOJ4W9#=xQf++>L_xodXLNlV^A$S`{lG*%5_tlEWx1g z`x!w3_TznA6g5Ltquyz*&nl@TJs>LAUN?bz2bP74;BGhJ9=qS2B45fnnF9MOAFnh~ ziLQxPm@>TmOERn$2s34-b+Wkhn09vOL~TIM^$6UicKs}=aZGfeqDg;;K|V7e64vFy z4B1whve>E1%xt@(-<3A{W?x);(o>KI|Mo&B19O`6Pi`-S|_^ysZ`fc^AC<7xD>PY72H|GP|U zaWW|TByLkNTr070x}xn@tZiYh_UEN>Y)$rS@k|z`P*SL3RBThNL}rJvkysVc&cn@8 z^x0~1`YOplQOmz@V7zi~)B^pKai!d7%Tk4{J=ODdZuPg+Mh|1@!8YU0}~dc zCk6tMg9ozgQ_C)X-Kx8oT)iUhU~XTo``@@HuJ_Z50GGfw8d}S6Q&>@ zMXLLr69Ba^BUl${Mdo36_bGKpn{{0aE~<++Ui^UKG5}@6u)6aXRm{4;+u!Fo6gR&y ze(99Oax%Rq=o>!OwWauTUQeYOuch-7lY5yyKexD2w;Zy^JR}&@etQ2g2Z`=T|3xk~ zV{no~5IjGOopN;Cs6|UCj!Cd##vB{<*;Ez-2-PJar6=bC1U9dtXPLuCx*;dr>tE?TjZT`G7sP?;bCCTkmHEw8gt3p_RzCL$t zC#$tdBi8)bEyeUa>}JSR6GVb{_VPd3Wv0ci=HuD&@hS`Y9MJgJO`LxsR!kE%M7BiM zU59t8yz5e<%B8+=__^l{i%%dA#Fl|}NUKxJ7jB#3t$=}|;(aF7@sW^M*@6JQ<#SP` zjay~E4gNZczJFP*Ni(2`hdO;{!HfB`?gWM9Z7gc`oD39_awM=`F=go4YaQ8+p;E5c zo0*N-=D+QC(SL7DHdqP@uCjfpU2gTnAM?GV{XB37F?is)`;P;1O6HN+TM9e2?vqlg UaPF3i-vtUoU1Oc+S`Lx_1K|`^8UO$Q diff --git a/public/assets/images/logo_mivita_fixed.png b/public/assets/images/logo_mivita_fixed.png index ec7f5c72d2d9bcd4f0c25bec30ce14f17b5fff26..c86a11da2bdbb0c03bb214a88d4b98a497e48e72 100644 GIT binary patch delta 11226 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 BUxxqy delta 4745 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 diff --git a/public/assets/images/produktfamilie.jpg b/public/assets/images/produktfamilie.jpg index a65c82c63075277532cf18b8c604db66930e67b0..cbf60caad6c5fe698cd0ee52d6422ddd547dba2c 100644 GIT binary patch literal 140657 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

ViD`}O+h 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

a!r#{W;ttN$8RPzOar^!fy8#a9w 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 AoB#j- literal 112999 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 z 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

A!W-{kv?e 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 diff --git a/public/assets/images/slider-hg_gruen-mitte.jpg b/public/assets/images/slider-hg_gruen-mitte.jpg index 634ada81791a366569474021a2549ed18f15c4e8..4b675ab5199fa62698ec3603ff9f1a5e8cd25fef 100644 GIT binary patch delta 122093 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

I28U4$ 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 aD~4wIkc1F1XX2b2TyKN5-SI*YfB)GbFrB#o delta 125037 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 LzbshR|DOLJfaOeH diff --git a/public/assets/plugins/text-rotator/demo.html b/public/assets/plugins/text-rotator/demo.html index ab19ca8..306e18f 100644 --- a/public/assets/plugins/text-rotator/demo.html +++ b/public/assets/plugins/text-rotator/demo.html @@ -52,7 +52,7 @@ .pointer { color: #9b59b6; - font-family: 'Pacifico', cursive; + font-family: 'Open Sans', Arial, Helvetica, sans-serif; font-size: 30px; margin-top: 15px; } diff --git a/public/images/logo_mivita.png b/public/images/logo_mivita.png index 09a6b2e85adab00f8f354c5fa25ec0b7b389b10c..5032188026f48ac5cf7e88b58fe3e7bf10444579 100644 GIT binary patch delta 16366 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 bD2Q71q#I0z4kz$hKZul=ylAzsVc`D)h^4SA delta 8493 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 999){ + return 999; + } + return number; + } +}; \ No newline at end of file diff --git a/public/js/iq-modal-cart.js b/public/js/iq-modal-cart.js new file mode 100644 index 0000000..e065a4e --- /dev/null +++ b/public/js/iq-modal-cart.js @@ -0,0 +1,181 @@ + +var IqModalCart = { + form: "#cart-order-form", + btn_modal_add: '.add-product-basket', + btn_add: '.add-from-basket', + btn_remove: '.remove-from-basket', + table_input: '.table-input-event-onchange', + oTable: null, + cart_holder: '#insert_show_products_order', + is_for: null, + modal: '#modals-load-content', + remove_item_cart: '.remove_item_form_cart', + insert_show_total_order: '#insert_show_total_order', + input_is_for: 'is_for', + comp_holder: '#holder_html_view_comp_product', + comp_products: 'switchers-comp-product', + count_comp_products: 'count_comp_products', + + _log: function ($msg){ + console.log($msg); + }, + init: function () { + var _self = this; + _self.url = $(_self.form).attr('action'); + _self.is_for = $('input[name="'+_self.input_is_for+'"]').val(); + _self.reInitCart($(_self.cart_holder)); + return _self; + }, + setDatabase: function (oTable){ + var _self = this; + _self.oTable = oTable; + }, + reInitModal: function (){ + var _self = this; + $(_self.oTable).find(_self.btn_modal_add).on('click', function(){ + _self.add_product_modal($(this)) + }); + }, + add_product_modal: function (_obj){ + var _self = this; + _self.performRequest({ + product_id: _obj.data('product-id'), + qty: 1, + action: 'addProduct' + }).done(_self.refreshView); + + }, + reInitCart: function (obj){ + var _self = this; + var _obj = obj; + obj.find(_self.btn_add).off('click').on('click', function(){ + _self.add_product($(this), _obj) + }); + obj.find(_self.btn_remove).off('click').on('click', function(){ + _self.remove_product($(this), _obj) + }); + obj.find(_self.table_input).off('change').on('change', function(){ + _self.update_input_table($(this), _obj); + }); + obj.find(_self.remove_item_cart).off('click').on('click', function(event){ + event.preventDefault() + _self.remove_from_cart($(this), _obj); + }); + if(_self.is_for === 'me' || _self.is_for === 'abo-me'){ + $('input[name^="'+_self.comp_products+'"]').on('change', function(){ + _self.update_comp_product($(this)); + }); + } + }, + update_comp_product: function (_obj){ + var _self = this; + _self.performRequest({ + comp_product_id: _obj.val(), + comp_num: _obj.data('comp_num'), + count_comp_products: $('input[name="'+_self.count_comp_products+'"]').val(), + action: 'updateCompProduct'}) + .done(_self.refreshView); + }, + add_product: function (_obj, _holder){ + var _self = this; + var input = _holder.find('input[name="product_qty_'+_obj.data('order-item-id')+'"]'); + var qty = parseInt(input.val()) + 1; + qty = _self.checkNumber(qty); + input.val(qty); + _self.update_cart(_holder, _obj, qty); + }, + remove_product: function (_obj, _holder){ + var _self = this; + var input = _holder.find('input[name="product_qty_'+_obj.data('order-item-id')+'"]'); + var qty = parseInt(input.val()) - 1; + qty = _self.checkNumber(qty); + input.val(qty); + _self.update_cart(_holder, _obj, qty); + }, + update_input_table: function (_obj, _holder){ + var _self = this; + var qty = parseInt(_obj.val()); + qty = _self.checkNumber(qty); + _obj.val(qty); + _self.update_cart(_holder, _obj, qty); + }, + update_cart: function (_holder, _obj, qty){ + var _self = this; + _self.performRequest({ + product_id: _obj.data('product-id'), + order_item_id: _obj.data('order-item-id'), + cart_order_id: _holder.data('cart-order-id'), + qty: qty, + action: 'updateCart' + }).done(_self.refreshView); + }, + remove_from_cart: function (_obj, _holder){ + var _self = this; + _self.performRequest({ + product_id: _obj.data('product-id'), + order_item_id: _obj.data('order-item-id'), + cart_order_id: _holder.data('cart-order-id'), + action: 'removeFromCart' + }).done(_self.refreshView); + }, + + refreshView: function (data) { + var _self = IqModalCart; + var obj = $(_self.cart_holder) + obj.html(data.html_cart); + $(_self.insert_show_total_order).html(data.html_total); + $(_self.modal).modal('hide'); + if($(_self.comp_holder)){ + $(_self.comp_holder).html(data.html_comp); + } + if($('#value-amount')){ + $('#value-amount').html(data.amount); + } + _self.reInitCart(obj); + + // var input = $(_self.table).find('input[name="product_qty_'+data.data.product_id+'"]'); + // input.val(data.data.qty); + // _self.showInit(); + }, + performRequest : function(data) { + var _self = this; + var url = _self.url, + contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; + + console.log(data); + console.log(url); + + return $.ajax({ + url: url, + data: data, + type: "POST", + dataType: "json", + cache: false, + contentType: contentType, + encode: true, + headers: { + 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') + } + }) + .done(function (data) { + console.log('performRequest'); + console.log(data); + + }).fail(function (jqXHR, textStatus, errorThrown) { + console.log(jqXHR); + console.log(jqXHR.responseText); + console.log(textStatus); + console.log(errorThrown); + console.log("Sorry, there was a problem!"); + }); + }, + checkNumber : function(number){ + if(number < 1 || isNaN(number)){ + return 1; + } + if(number >= 999){ + return 999; + } + return number; + } +}; \ No newline at end of file diff --git a/resources/lang/de.json b/resources/lang/de.json index 3fc184b..1fab60d 100644 --- a/resources/lang/de.json +++ b/resources/lang/de.json @@ -91,6 +91,7 @@ "Data, Login & Security": "Daten, Anmeldung & Sicherheit", "Sign in with your e-mail:": "Anmeldung mit Deiner E-Mail:", "delete": "löschen", + "confirm_delete": "Wirklich löschen?", "imprint": "Impressum", "data protections": "Datenschutz", "Thank you for your registration!": "Vielen Dank für Deine Registrierung!", diff --git a/resources/lang/de/abo.php b/resources/lang/de/abo.php new file mode 100644 index 0000000..ae45be1 --- /dev/null +++ b/resources/lang/de/abo.php @@ -0,0 +1,65 @@ + 'Abo', + 'payment_for_abo' => 'Zahlungsart für Abo', + 'abo_delivery' => 'Abo - regelmäßige Lieferung', + 'abo_are_for_me_and_shipped' => 'Abo ist für mich und wird an meine Adresse versendet', + 'abo_are_for_customer_and_shipped' => 'Abo ist für einen Kunden und wird an den Kunden versendet', + 'abo_delivery_to_me' => 'Abo-Lieferung an mich', + 'abo_delivery_to_the_customer' => 'Abo-Lieferung an den Kunden', + 'every_week' => 'jede Woche', + 'every_weeks' => 'alle :num Wochen', + 'of_month' => 'des Monat', + 'delivery_intervall' => 'Liefertag anpassen', + 'abo_order_info' => 'Mit dem Abschluss des Abonnements wird eine regelmäßige Lieferung eingerichtet, die automatisch an dem gewählten Liefertag versendet und abgerechnet wird, beginnend ab dem heutigen Datum. Anpassungen können jederzeit bequem im Kundenkonto vorgenommen werden. Als Zahlungsmethoden stehen PayPal und Kreditkarte zur Verfügung.', + 'abo_infos' => 'Abo Infos', + 'abo_delivery_infos' => 'Abo Lieferinfos', + 'abo_start_date' => 'Beginn des Abos', + 'abo_delivery_intervall' => 'Liefertag des Abos', + 'delivery_day' => 'Liefertag anpassen', + 'abo_settings' => 'Abo Einstellungen', + 'add_new_abo' => 'Neues Abo anlegen', + 'abo_edit' => 'Abo bearbeiten', + 'abo_details' => 'Abo Details', + 'abo_is_active' => 'Abo ist aktiv', + 'abo_copy_active' => 'Wenn das Abonnement nicht aktiv ist, erfolgt keine automatische Ausführung.', + 'abo_copy_next_date' => 'Der nächste Ausführungstermin kann frühesten auf den Folgetag festgelegt werden.', + 'abo_copy_abo_interval' => 'Die Anpassung des Abonnement-Liefertags wirkt sich auf den kommenden Ausführungstermin aus, wenn das Abonnement aktiv ist.', + 'error_abo_interval' => 'Das Abo Interval nicht korrekt', + 'error_next_date' => 'Das Datum für die nächste Ausführung nicht korrekt', + 'checkout_mail_abo_hl' => 'Dein Abo / regelmäßige Lieferung.', + 'checkout_mail_abo_start' => 'Dein Abo wurde erfolgreich mit folgenden Einstellungen angelegt:', + 'checkout_mail_abo_info' => 'Deine Abo-Einstellungen findest Du in Deinem Account unter "Meine Abos" und dort können die Einstellungen auch bearbeitet werden.', + 'abo_new' => 'neu', + 'abo_okay' => 'okay', + 'abo_hold' => 'angehalten', + 'abo_cancel' => 'storniert', + 'abo_finish' => 'beendet', + 'abo_inactive' => 'inaktiv', + 'abo_grace' => 'kulanz', + 'pros_hl' => 'Die Vorteile eines Abos', + 'pros_list' => '

  • Abo-Abschluss für Berater und Kunden: Jeder Berater oder Kunde kann ein Abo abschließen, das an einem festgelegten Tag im Monat ausgeführt wird, um eine regelmäßige und planbare Lieferung zu gewährleisten.
  • +
  • Monatliche Lieferung: Einmal im Monat wird eine neue Lieferung direkt an die Haustür gesendet.
  • +
  • Flexibel anpassbar: Das Abonnement kann jederzeit angepasst werden, z.B. in Bezug auf Produkte, Mengen oder Lieferzeitpunkte.
  • +
  • Vielfältige Produktauswahl: Verschiedene Produkte können im Abo enthalten sein.
  • +
  • Einfache Verwaltung: Änderungen und Anpassungen können bequem im Salescenter vorgenommen werden.
  • +
  • Pausieren oder Beenden: Das Abo kann flexibel pausiert oder beendet werden.
  • +
  • Preisvorteil: Die Abo-Produkte erhalten oft spezielle Rabatte oder Angebote.
  • +
  • Jetzt starten: Wähle Deine Produkte, passe das Abo an deine Bedürfnisse an, zahle die erste Bestellung und aktiviere damit Dein Abo für die nächsten Lieferungen.
  • ', + 'abo_pros' => 'Abo Vorteile', + 'abo_order_info' => 'Du kannst die Produkte Deines Abos jederzeit anpassen, bei der nächsten Ausführung werden Dir Deine zusammengestellen Produkte zugesendet.', + 'abo_order_hl' => 'Abo Zusammenstellung', + 'add_product' => 'Produkt hinzufügen', + 'product_prices_career_level_info' => 'Die Produktpreise werden entsprechend Deinem Karriere-Level :user_level_name abzüglich :user_level_margin % Marge angezeigt und brechnet.', + 'product_prices_career_level_cpay_info' => 'Die Produktpreise werden als Kunden VK-Preise angezeigt, nach Abschluss der Kundenzahlung erhälst du Deine Provision entsprechend Deinem Karriere-Level :user_level_name Provision :user_level_margin %.', + 'error_email_has_abo' => 'Für die E-Mail-Adresse :email ist bereits ein Abonnement vorhanden.', + 'abo_assigned' => 'Abo aktiv', + 'base' => 'Basis', + 'upgrade' => 'Upgrade', + 'abo_type_info' => 'Hinweis:Jedes Abo besteht mindestens aus einem Basis-Produkt :base !
    Upgrade-Produkte :upgrade sind optional und können nach belieben hinzugefügt werden.', + 'abo_type_info_base' => 'Das Abo benötigt mindestens ein Basis-Produkt :base !', + 'need_basis_product' => 'Sie müssen min. ein Basis-Produkt in Ihrem Abo haben, bitte fügen Sie erst ein neues Basis-Produkt hinzu und entfernen Sie dann das alte Basis-Produkt!', + 'abo_item_not_found' => 'Abo-Position nicht gefunden', + 'product_not_found' => 'Produkt nicht gefunden', +); diff --git a/resources/lang/de/actions.php b/resources/lang/de/actions.php index 0510007..a78f355 100644 --- a/resources/lang/de/actions.php +++ b/resources/lang/de/actions.php @@ -20,5 +20,5 @@ return array ( 'dictResponseError' => 'Server responded with {{statusCode}} code.', 'dictCancelUpload' => 'Cancel upload', 'dictRemoveFile' => 'Remove file', - 'dictMaxFilesExceeded' => 'You can not upload any more files.' + 'dictMaxFilesExceeded' => 'You can not upload any more files.', ); diff --git a/resources/lang/de/email.php b/resources/lang/de/email.php index 5af469e..b3c3a3d 100644 --- a/resources/lang/de/email.php +++ b/resources/lang/de/email.php @@ -96,8 +96,10 @@ Dein Team von MIVITA', 'verify_copy1line' => 'Wir haben Daten über Dich in unserem System gespeichert. Bitte folge dem unten stehenden Link um Deine E-Mail-Adresse zu bestätigen. Weitherhin kannst Du Deine Daten ändern oder auch löschen.', 'verify_e_mail' => 'Bestätige Deine Daten und E-Mail-Adresse', 'your_request_from' => 'Deine Anfrage von', - 'your_custom_payout' => 'Dein persönlicher mivita Berater - :name hat eine individuelle Bestellung für Dich zusammengestellt. Jetzt musst Du nur noch Deine Bestellung bezahlen. Klicke auf den Link und gelange zum Checkout von mivita.care.', + 'your_custom_payout' => 'Dein persönlicher mivita Berater - :name hat eine individuelle Bestellung für Dich zusammengestellt. Jetzt musst Du nur noch Deine Bestellung bezahlen. Klicke auf den Link und gelange zum Checkout von mivita.care.', + 'your_custom_abo_payout' => 'Dein persönlicher mivita Berater - :name hat eine individuelle Abo-Bestellung für Dich zusammengestellt. Jetzt musst Du nur noch Deine Abo-Bestellung bezahlen. Klicke auf den Link und gelange zum Checkout von mivita.care.', 'subject_custom_payout' => 'Deine individuelle Bestellung von :name auf mivita.care', + 'subject_custom_abo_payout' => 'Deine individuelle Abo-Bestellung von :name auf mivita.care', 'button_custom_payout' => 'zur Zahlung', 'checkout_custom_payout' => 'Dein Berater hat folgende Produkte für Dich zusammengestellt', diff --git a/resources/lang/de/membership.php b/resources/lang/de/membership.php index 06f9a98..d65ba11 100644 --- a/resources/lang/de/membership.php +++ b/resources/lang/de/membership.php @@ -41,9 +41,9 @@ return array ( 'inactive' => 'inaktiv', 'is_no_longer_possible_to_change_package' => 'Eine Änderung Deines Berater-Paketes ist nicht mehr möglich.', 'membership' => 'Mitgliedschaft', - 'membership_was_renewed' => 'Deine Mitglidschaft wurde am :date verlängert. ', + 'membership_was_renewed' => 'Dein Vertrag wurde am :date verlängert. ', 'open_payment_options' => 'Zahlungsoptionen öffnen', - 'payment_copy_1' => 'Alternativ hast Du die Möglichkeit jetzt direkt Deine Mitgliedschaft mit anderen Zahlungsmöglichkeite zu bezahlen.', + 'payment_copy_1' => 'Alternativ hast Du die Möglichkeit jetzt direkt Deine Mitgliedschaft mit anderen Zahlungsmöglichkeiten zu bezahlen.', 'payment_copy_2' => 'Ist die Mitgliedschaft vor dem :date bezahlt, wird das SEPA Mandart nicht ausgeführt!', 'payment_has_been_made' => 'Eine Zahlung wurde ausgeführt.', 'renewal_is_active_membership_fee_automatic' => ' Deine automatische Verlängerung ist aktiv, wir werden am :date Deine Mitgliedschaftsgebühr automatisch per SEPA Mandat einziehen.', @@ -55,4 +55,6 @@ return array ( 'upgrade_package_and_proceed_payment' => 'Du hast die Möglichkeit Dein Paket zu upgraden, wähle einfach das erweiterte Paket aus und gehe weiter zur Zahlung.', 'we_do_not_collect_membership_fee' => 'Wir konnten am :date Deine Mitgliedschaftsgebühr nicht automatisch per SEPA Mandat einziehen.', 'your_booked_package' => 'Dein gebuchtes Paket', + 'info_contract_renewal' => 'Dein Vertrag wird :days Tage vor Ablauf Deiner Berater-Mitgliedschaft automatisch verlängert. Nach der Vertragsverlängerung ist eine Änderung des Berater-Pakets nicht mehr möglich und du musst die Zahlung für Deine Mitgliedschaft vornehmen.', + 'alert_contract_renewal' => 'Um Deine Berater-Mitgliedschaft zu verlängern, führe bitte die Zahlung für Dein gebuchtes MIVITA-Paket durch.' ); diff --git a/resources/lang/de/navigation.php b/resources/lang/de/navigation.php index dc297be..44d92be 100644 --- a/resources/lang/de/navigation.php +++ b/resources/lang/de/navigation.php @@ -57,5 +57,12 @@ return array ( 'downloadcenter' => 'Downloadcenter', 'files' => 'Dateien', 'tags' => 'Tags', + 'myabos' => 'Meine Abos', + 'customerabos' => 'Kunden Abos', + 'myabo' => 'Mein Abo', + 'customerabo' => 'Kunden Abo', + 'abo' => 'Abo', + 'abos' => 'Abos', + 'payment_links' => 'Bezahllinks', ); diff --git a/resources/lang/de/order.php b/resources/lang/de/order.php index b069a12..e8ae271 100644 --- a/resources/lang/de/order.php +++ b/resources/lang/de/order.php @@ -48,6 +48,7 @@ return array ( 'invoice' => 'Rechnung', 'invoice_address' => 'Rechnungsadresse', 'land_can_no_longer_be_changed' => 'Das Land kann nicht mehr geändert werden', + 'email_can_not_be_changed' => 'Deine E-Mail Adresse kann nicht mehr geändert werden', 'link_to_the_invoice' => 'Link zur Rechnung', 'my_delivery_address' => 'Meine Lieferadresse', 'net' => 'netto', @@ -76,8 +77,10 @@ return array ( 'ship_to_existing_customer_select_customer' => 'An bestehenden Kunden versenden | Kunden auswählen', 'ship_to_new_customer' => 'An neuen Kunden versenden', 'ship_to_this_customer' => 'An diesen Kunde versenden', - 'ship_to_this_customer_check' => 'Mir ist bekannt, dass dieser Bestellvorgang nur für Kundenbestellungen ist und nicht für meine eigenen Bestellungen', - 'ship_to_this_customer_info' => 'Sollten unten stehende Angaben nicht korrekt sein oder aktualisiert werden müssen, ändere diese bitte vorerst unter', + 'ship_to_this_customer_check' => 'Mir ist bekannt, dass dieser Bestellvorgang nur für Kundenbestellungen ist und nicht für meine eigenen Bestellungen.', + 'ship_to_this_customer_info' => 'Sollten die Rechnungsadresse oder das Lieferland nicht korrekt sein, ändere diese bitte vor der Bestellung unter', + 'ship_to_this_customer_info_2' => 'Die Lieferadresse, bis auf das Lieferland, kann auch im Checkout angepassst werden.', + 'ship_to_this_email_info' => 'Der Bestelllink wird Deinem Kunden an folgenden E-Mail-Adresse gesendet:', 'shipping' => 'Versand', 'shipping_compensation_product' => 'Versand Kompensationsprodukt', 'shipping_costs' => 'Versandkosten', @@ -107,23 +110,8 @@ return array ( 'sum_net' => 'Summe netto', 'confirm_and_send_order' => 'Bestellung abschließen und Zahlungslink versenden', 'confirm_send_order_info' => 'Mit dem Abschließen der Bestellung wird ein Zahlungslink erstellt und per E-Mail an Deinen Kunden versendet.
    Dein Kunde kann dann die Zahlung abschließen und die Ware wird versendet, Deine Provision wird mit dem Abschluss der Zahlung gutgeschrieben.', - 'order_was_placed_successfully' => 'Die Bestellung wurde erfolgreich aufgegeben.', + 'order_was_placed_successfully' => 'Die Bestellung wurde erfolgreich angelegt.', + 'order_abo_was_placed_successfully' => 'Die Abo-Bestellung wurde erfolgreich angelegt.', 'payment_link_for_your_customer' => 'Der Bezahllink für Deinen Kunden', 'delivery' => 'Lierferung', - 'payment_for_abo' => 'Zahlungsart für Abo', - 'abo_delivery' => 'Abo - regelmäßige Lieferung', - 'abo_are_for_me_and_shipped' => 'Abo ist für mich und wird an meine Adresse versendet', - 'abo_are_for_customer_and_shipped' => 'Abo ist für einen Kunden und wird an den Kunden versendet', - 'abo_delivery_to_me' => 'Abo-Lieferung an mich', - 'abo_delivery_to_the_customer' => 'Abo-Lieferung an den Kunden', - 'every_week' => 'jede Woche', - 'every_weeks' => 'alle :num Wochen', - 'abo_settings' => 'Abo Einstellungen', - 'delivery_intervall' => 'Lieferintervall anpassen', - 'abo_order_info' => 'Durch das Abschließen des Abonnements wird eine regelmäßige Lieferung eingerichtet, die automatisch im festgelegten Intervall geliefert und abgerechnet wird, beginnend ab heute. Anpassungen am Abonnement können im Kundenkonto vorgenommen werden. Mögliche Zahlungsarten sind PayPal und Kreditkarte.', - 'abo_infos' => 'Abo Infos', - 'abo_delivery_infos' => 'Abo Lieferinfos', - 'abo_start_date' => 'Beginn des Abos', - 'abo_delivery_intervall' => 'Lieferintervall des Abos', - ); diff --git a/resources/lang/de/payment.php b/resources/lang/de/payment.php index 7a11ee6..40db3e1 100644 --- a/resources/lang/de/payment.php +++ b/resources/lang/de/payment.php @@ -84,13 +84,29 @@ return array ( 'your_mivita_team' => 'Dein Team von mivita.care', 'your_order_number_is' => 'Deine Bestellnummer ist', 'open'=>'offen', + 'openly'=>'geöffnet', 'paid'=>'bezahlt', 'check'=>'prüfen', 'cancelled'=>'storniert', - + 'link_sent'=>'Link gesendet', + 'link_openly'=>'Link geöffnet', + 'link_check'=>'Zahlung in Ausführung', + 'link_pending'=>'Zahlung in Bearbeitung', + 'link_failed'=>'Zahlung fehlgeschlagen', + 'link_canceled'=>'Zahlung abgebrochen', + 'link_appointed'=>'Zahlung genehmigt', + 'link_paid'=>'bezahlt', + 'alert_link_sent'=>'Zahlungslink gesendet', + 'alert_link_openly'=>'Zahlungslink geöffnet', + 'alert_link_check'=>'Zahlung in Ausführung', + 'alert_link_pending'=>'Zahlung in Bearbeitung', + 'alert_link_failed'=>'Zahlung ist fehlgeschlagen', + 'alert_link_canceled'=>'Zahlung wurde abgebrochen', + 'alert_link_appointed'=>'Zahlung wurde genehmigt', + 'alert_link_paid'=>'Zahlung war erfolgreich', 'failed' => 'abbruch', 'no_payment' => 'keine Zahlung', - + 'link_was_paid' => 'Die Zahlung wurde erfolgreich abgeschlossen.', 'paymend_paid' => 'Zahlung bezahlt', 'paymend_open' => 'Zahlung offen', 'paymend_failed' => 'Zahlung abbruch', @@ -121,7 +137,6 @@ return array ( 'shop'=> 'Shop', 'external'=> 'extern', 'collective_invoice'=> 'Sammelrechnung', - 'in_process'=> 'in Bearbeitung', 'shipped'=> 'versendet', 'completed'=> 'abgeschlossen', diff --git a/resources/lang/de/tables.php b/resources/lang/de/tables.php index ba37609..5f87cb8 100644 --- a/resources/lang/de/tables.php +++ b/resources/lang/de/tables.php @@ -1,6 +1,6 @@ '', 'VAT' => 'MwSt', 'account' => 'Account', @@ -76,5 +76,19 @@ return array ( 'type' => 'Art', 've' => 'VE', 'vk_price' => 'VK-Preis', - 'my_commission' => 'Meine Provision', + 'my_commission' => 'Mein Provision', + 'start_date' => 'Start Datum', + 'next_date' => 'Nächste Ausführung', + 'last_date' => 'Letzte Ausführung', + 'abo_delivery_day' => 'Abo-Liefertag', + 'abo_delivery' => 'Abo-Lieferungen', + 'active' => 'Aktiv', + 'is_for' => 'Ist für', + 'count' => 'Anzahl', + 'member' => 'Mitglied', + 'adviser' => 'Berater', + 'exc' => 'Ausf.', + 'executions' => 'Ausführungen', + 'previous_orders' => 'bisherige Kundebestellungen', + 'partner_since' => 'Partner seit', ); diff --git a/resources/lang/de/team.php b/resources/lang/de/team.php index 4f03a1b..0d93398 100644 --- a/resources/lang/de/team.php +++ b/resources/lang/de/team.php @@ -22,7 +22,7 @@ return array ( 'current_commission_level' => 'aktuelle Provisions-Stufe', 'customer_commission' => 'Kundenprovision', 'consultant_margin' => 'Beratermarge', - 'consultant_margin_info' => 'Hinweis: Die Marge wurde bei der Bestellung (an den Produkten) bereits abgezogen.', + 'consultant_margin_info' => 'Hinweis: Die Marge wurde bei der Bestellung bereits abgezogen und somit schon ausbezahlt.', 'customer_points' => 'Kunden Points', 'date' => 'Datum', 'e' => 'E', diff --git a/resources/lang/en/abo.php b/resources/lang/en/abo.php new file mode 100644 index 0000000..25926b0 --- /dev/null +++ b/resources/lang/en/abo.php @@ -0,0 +1,40 @@ + 'Subscription', + 'payment_for_abo' => 'Payment method for subscription', + 'abo_delivery' => 'Subscription - regular delivery', + 'abo_are_for_me_and_shipped' => 'Subscription is for me and will be shipped to my address', + 'abo_are_for_customer_and_shipped' => 'Subscription is for a customer and will be sent to the customer', + 'abo_delivery_to_me' => 'Subscription delivery to me', + 'abo_delivery_to_the_customer' => 'Subscription delivery to the customer', + 'every_week' => 'every week', + 'every_weeks' => 'every :num weeks', + 'abo_settings' => 'Subscription settings', + 'delivery_interval' => 'customize delivery interval', + 'abo_order_info' => 'By completing the subscription, a regular delivery is set up, which is automatically delivered and billed at the specified interval, starting today. Adjustments to the subscription can be made in the customer account. Possible payment methods are PayPal and credit card.', + 'abo_infos' => 'Subscription info', + 'abo_delivery_infos' => 'Subscription delivery information', + 'abo_start_date' => 'Start date of the subscription', + 'abo_delivery_interval' => 'Delivery interval of the subscription', + 'abo_settings' => 'Subscription settings', + 'add_new_abo' => 'Add new subscription', + 'abo_edit' => 'Edit subscription', + 'abo_details' => 'Subscription details', + 'abo_is_active' => 'Subscription is active', + 'abo_copy_active' => 'If the subscription is not active, it will not be executed automatically', + 'abo_copy_next_date' => 'The next execution date can be set to the following day at the earliest', + 'abo_copy_abo_interval' => 'The adjustment of the subscription interval does not affect the next execution date, but affects the dates after the next execution', + 'error_abo_interval' => 'The subscription interval is not correct', + 'error_next_date' => 'The date for the next execution is not correct', + 'checkout_mail_abo_hl' => 'Your subscription / regular delivery', + 'checkout_mail_abo_start' => 'Your subscription was successfully created with the following settings:', + 'checkout_mail_abo_info' => 'You can find your subscription settings in your account under "My subscriptions" and the settings can also be edited there', + 'abo_new' => 'new', + 'abo_okay' => 'okay', + 'abo_hold' => 'stopped', + 'abo_cancel' => 'canceled', + 'abo_finish' => 'finished', + 'abo_inactive' => 'inactive', + 'abo_grace' => 'grace', +); diff --git a/resources/lang/en/membership.php b/resources/lang/en/membership.php index 9fd2b1e..0a87872 100644 --- a/resources/lang/en/membership.php +++ b/resources/lang/en/membership.php @@ -7,6 +7,7 @@ return array ( 'abo_copy_3' => 'I hereby confirm that I will delete my SEPA and deactivate the automatic extension.', 'active' => 'active', 'active_package' => 'active package', + 'alert_contract_renewal' => 'To extend your consultant membership, please complete the payment for your booked MIVITA package.', 'booked_package' => 'booked package', 'change' => 'adjust', 'change_copy_1' => 'You can change your membership until the next contract extension, on :date.', @@ -38,9 +39,10 @@ return array ( 'home_copy_last_36' => 'As announced, we have paused your advisor account because you did not renew your membership in time. If you would like to benefit from the advantages and features of MIVITA again, you can reactivate your account at any time.', 'home_hl' => 'membership / annual fee', 'inactive' => 'inactive', + 'info_contract_renewal' => 'Your contract will be automatically extended :days before your consultant membership expires. Once the contract has been extended, it is no longer possible to change the consultant package and you must make the payment for your membership.', 'is_no_longer_possible_to_change_package' => 'It is no longer possible to change your advisor package.', 'membership' => 'membership', - 'membership_was_renewed' => 'Your membership was renewed on :date.', + 'membership_was_renewed' => 'Your contract was renewed on :date.', 'open_payment_options' => 'open payment options', 'payment_copy_1' => 'Alternatively, you now have the option of paying for your membership directly using other payment options.', 'payment_copy_2' => 'If the membership is paid before the :date, the SEPA mandate will not be executed!', diff --git a/resources/lang/es/abo.php b/resources/lang/es/abo.php new file mode 100644 index 0000000..352cee7 --- /dev/null +++ b/resources/lang/es/abo.php @@ -0,0 +1,40 @@ + 'Suscripción', + 'payment_for_abo' => 'Forma de pago para la suscripción', + 'abo_delivery' => 'Suscripción - entrega regular', + 'abo_are_for_me_and_shipped' => 'La suscripción es para mí y se enviará a mi dirección', + 'abo_are_for_customer_and_shipped' => 'La suscripción es para un cliente y será enviada al cliente', + 'abo_delivery_to_me' => 'Envío de la suscripción a mi dirección', + 'abo_delivery_to_the_customer' => 'Entrega de suscripción al cliente', + 'every_week' => 'cada semana', + 'every_weeks' => 'cada :num semanas', + 'abo_settings' => 'Ajustes de suscripción', + 'delivery_interval' => 'personalizar intervalo de entrega', + 'abo_order_info' => 'Al completar la suscripción, se establece una entrega regular, que se entrega y factura automáticamente en el intervalo especificado, a partir de hoy. Los ajustes a la suscripción se pueden hacer en la cuenta del cliente. Los métodos de pago posibles son PayPal y tarjeta de crédito.', + 'abo_infos' => 'Información de suscripción', + 'abo_delivery_infos' => 'Información de entrega de la suscripción', + 'abo_start_date' => 'Fecha de inicio de la suscripción', + 'abo_delivery_interval' => 'Intervalo de entrega de la suscripción', + 'abo_settings' => 'Configuración de la suscripción', + 'add_new_abo' => 'Añadir nueva suscripción', + 'abo_edit' => 'Editar suscripción', + 'abo_details' => 'Detalles de suscripción', + 'abo_is_active' => 'La suscripción está activa', + 'abo_copy_active' => 'Si la suscripción no está activa, no se ejecutará automáticamente', + 'abo_copy_next_date' => 'La siguiente fecha de ejecución puede establecerse como muy pronto al día siguiente', + 'abo_copy_abo_interval' => 'El ajuste del intervalo de suscripción no afecta a la siguiente fecha de ejecución, pero afecta a las fechas posteriores a la siguiente ejecución', + 'error_abo_interval' => 'El intervalo de suscripción no es correcto', + 'error_next_date' => 'La fecha de la siguiente ejecución no es correcta', + 'checkout_mail_abo_hl' => 'Su suscripción / entrega regular', + 'checkout_mail_abo_start' => 'Su suscripción se ha creado correctamente con la siguiente configuración:', + 'checkout_mail_abo_info' => 'Puede encontrar la configuración de su suscripción en su cuenta en «Mis suscripciones» y la configuración también se puede editar allí', + 'abo_new' => 'nuevo', + 'abo_okay' => 'ok', + 'abo_hold' => 'parado', + 'abo_cancel' => 'cancelado', + 'abo_finish' => 'terminado', + 'abo_inactive' => 'inactivo', + 'abo_grace' => 'gracia', +); diff --git a/resources/lang/es/cal.php b/resources/lang/es/cal.php index bce94f5..e016bf5 100644 --- a/resources/lang/es/cal.php +++ b/resources/lang/es/cal.php @@ -11,7 +11,7 @@ return array ( 'July' => 'julio', 'June' => 'junio', 'March' => 'marzo', - 'May' => 'puede', + 'May' => 'mayo', 'November' => 'noviembre', 'October' => 'octubre', 'September' => 'septiembre', diff --git a/resources/lang/es/homeparty.php b/resources/lang/es/homeparty.php index 6abc192..8b2b022 100644 --- a/resources/lang/es/homeparty.php +++ b/resources/lang/es/homeparty.php @@ -14,18 +14,18 @@ return array ( 'create_guest' => 'crear invitado', 'create_guests' => 'crear invitados', 'create_guests_info' => 'Luego se pueden crear invitados y realizar pedidos.', - 'create_new_homeparty' => 'crear un nuevo grupo de tiempo muerto', + 'create_new_homeparty' => 'Recrea la fiesta de descanso', 'credit_bonus' => 'bonificación de crédito', - 'credit_homeparty_voucher' => 'bono de fiesta de tiempo muerto de crédito', + 'credit_homeparty_voucher' => 'bono de fiesta de descanso de crédito', 'current_bonus_view' => 'vista de bonificación actual', 'data_protection' => 'protección de Datos', 'data_protection_reasons_your_personal_data_will_not_be_shown' => 'Nota: Por motivos de protección de datos, sus datos personales no se mostrarán aquí a otros participantes. Una vez enviados, ya no se pueden editar. Si desea realizar un cambio más adelante, comuníquese con su asesor personal de MIVITA.', 'deduct_points_by_voucher' => 'deducción de puntos mediante bono', - 'delivery_address_homeparty' => 'fiesta de tiempo de espera de dirección de entrega', + 'delivery_address_homeparty' => 'Dirección de entrega de la fiesta de descanso', 'delivery_directly_to_the_guest' => 'entrega directamente al huésped.', 'delivery_to_host' => 'entrega al anfitrión', 'description_welcome_text' => 'descripción/texto de bienvenida', - 'enter_your_personal_data_for_homeparty' => 'introduce tus datos personales para la fiesta de tiempo muerto', + 'enter_your_personal_data_for_homeparty' => 'Introduce tus datos personales para la fiesta de descanso', 'event_date' => 'fecha del evento', 'event_place' => 'evento', 'from' => 'lejos', @@ -36,14 +36,14 @@ return array ( 'guest_order_sent_directly_info' => 'Si un huésped desea que su pedido se envíe directamente a su dirección personal, puede especificarlo por separado durante el proceso de pedido.', 'guests' => 'invitados', 'homeparty' => 'Fiesta de descanso', - 'homeparty_add_host_address_info' => 'Ingrese la dirección del anfitrión donde se organiza la fiesta de tiempo muerto.', - 'homeparty_delete_really' => '¿Realmente eliminar la fiesta de tiempo muerto?', + 'homeparty_add_host_address_info' => 'Ingrese la dirección del anfitrión donde se organiza la fiesta de descanso.', + 'homeparty_delete_really' => '¿Realmente eliminar la fiesta de descanso?', 'homeparty_invoice_info' => 'La factura de mivita se enviará a su dirección (consultor). Usted es responsable de facturar al anfitrión y a los invitados.', - 'homeparty_manage' => 'gestionar fiesta de tiempo muerto', + 'homeparty_manage' => 'gestionar fiesta de descanso', 'host' => 'anfitriona', 'host_address_save' => 'guardar dirección de host', 'host_can_not_delete' => 'el host no se puede eliminar', - 'host_homeparty' => 'anfitrión: fiesta de tiempo muerto', + 'host_homeparty' => 'anfitrión: fiesta de descanso', 'host_organiser_event' => 'anfitrión/organizador', 'invitation' => 'invitación', 'invitation_link_for_guests' => 'enlace de invitación para invitados.', @@ -65,9 +65,9 @@ return array ( 'voucher_bonus' => 'bono de vale', 'voucher_bonus_cannot_be_applied' => 'El cupón/bono no se puede aplicar porque el anfitrión no ha agregado ningún producto.', 'voucher_total' => 'bono total', - 'welcome_copy' => 'Bienvenidos a nuestra fiesta time-out sobre aloe vera ecológico y cosmética natural. Le informaremos sobre lo que realmente significa calidad superior en cosmética natural, le mostraremos muchos ejemplos de aplicaciones para problemas de la piel y los intestinos y, por supuesto, podrá probar nuestros productos exhaustivamente. ¡Esperamos verte!', + 'welcome_copy' => 'Bienvenidos a nuestra fiesta de descando sobre aloe vera ecológico y cosmética natural. Le informaremos sobre lo que realmente significa calidad superior en cosmética natural, le mostraremos muchos ejemplos de aplicaciones para problemas de la piel y los intestinos y, por supuesto, podrá probar nuestros productos exhaustivamente. ¡Esperamos verte!', 'your_MIVITA_advice' => 'tu consejo MIVITA', - 'your_data_has_been_successfully_created_have_fun' => 'Tus datos han sido creados exitosamente. ¡Diviértete en la fiesta del descanso!', + 'your_data_has_been_successfully_created_have_fun' => 'Tus datos han sido creados exitosamente. ¡Diviértete en la fiesta de descanso!', 'your_host' => 'tu anfitrión', 'your_hostess' => 'tu anfitriona', ); diff --git a/resources/lang/es/membership.php b/resources/lang/es/membership.php index 7c9e134..86be59f 100644 --- a/resources/lang/es/membership.php +++ b/resources/lang/es/membership.php @@ -7,6 +7,7 @@ return array ( 'abo_copy_3' => 'Por la presente confirmo que eliminaré mi SEPA y desactivaré la extensión automática.', 'active' => 'activo', 'active_package' => 'paquete activo', + 'alert_contract_renewal' => 'Para ampliar su afiliación como consultor, complete el pago de su paquete MIVITA reservado.', 'booked_package' => 'paquete reservado', 'change' => 'ajustar', 'change_copy_1' => 'Puedes cambiar tu membresía hasta la próxima extensión de contrato, el :date.', @@ -38,9 +39,10 @@ return array ( 'home_copy_last_36' => 'Como lo anunciamos, hemos pausado su cuenta de asesor porque no renovó su membresía a tiempo. Si deseas volver a beneficiarte de las ventajas y características de MIVITA, puedes reactivar tu cuenta en cualquier momento.', 'home_hl' => 'membresía / cuota anual', 'inactive' => 'inactivo', + 'info_contract_renewal' => 'Su contrato se renovará automáticamente :días antes de que expire su afiliación como consultor. Una vez prorrogado el contrato, ya no será posible cambiar el paquete de consultor y deberá abonar su afiliación.', 'is_no_longer_possible_to_change_package' => 'Ya no es posible cambiar su paquete de asesor.', 'membership' => 'membresía', - 'membership_was_renewed' => 'Su membresía fue renovada el :date.', + 'membership_was_renewed' => 'Su contrato se prorrogó en :date.', 'open_payment_options' => 'abrir opciones de pago', 'payment_copy_1' => 'Alternativamente, ahora tiene la opción de pagar su membresía directamente utilizando otras opciones de pago.', 'payment_copy_2' => 'Si la membresía se paga antes de la :date, ¡el mandato SEPA no se ejecutará!', diff --git a/resources/lang/es/validation.php b/resources/lang/es/validation.php index cdd11cc..34d4542 100644 --- a/resources/lang/es/validation.php +++ b/resources/lang/es/validation.php @@ -65,8 +65,8 @@ return array ( 'shipping_salutation' => 'saludo', 'shipping_zipcode' => 'código postal', 'size' => 'tamaño', - 'tax_identification_number' => 'número de identificación tributaria', - 'tax_number' => 'número de impuesto', + 'tax_identification_number' => 'número de RIO', + 'tax_number' => 'número de impuesto (NIE ó NIF)', 'time' => 'tiempo', 'title' => 'título', 'user_shop_active' => 'condiciones de uso', diff --git a/resources/lang/es/website.php b/resources/lang/es/website.php index 8aa3512..130ed3b 100644 --- a/resources/lang/es/website.php +++ b/resources/lang/es/website.php @@ -21,7 +21,7 @@ return array ( 'contents' => 'contenido', 'email' => 'correo electrónico', 'for_you_on_spot' => 'para ti en el sitio', - 'for_you_on_spot_copy' => 'Estuvimos a su disposición en Aloe Vera Farm en Mallorca, porque para nosotros la transparencia es importante. De esta manera sabrá exactamente de dónde provienen sus productos y cómo se producen. Calidad auténtica.', + 'for_you_on_spot_copy' => 'La transparencia es muy imprtante para nosotros. Por eso estuvimos en Mallorca para visitar la granja de Aloe Vera. Para que sepa exactamente de dónde proceden nuestros productos y cómo se producen.', 'gtc' => 'condiciones', 'impress' => 'imprimir', 'language' => 'idioma', @@ -33,7 +33,7 @@ return array ( 'note_on_use_copy' => '¡El uso, reproducción, distribución, publicación o uso comercial no autorizado sin el permiso del autor del contenido de este sitio web está prohibido y será perseguido tanto bajo la ley penal como civil!', 'online_dispute_resolution' => 'resolución de disputas en línea', 'online_dispute_resolution_copy' => 'Según el artículo 14, apartado 1, ODR-VO: la Comisión Europea proporciona una plataforma para la resolución de disputas (OS) en línea, que puede encontrar aquí', - 'partner' => 'pareja', + 'partner' => 'socio', 'payment_methods' => 'métodos de pago', 'phone' => 'teléfono', 'phone_number' => 'teléfono: +49 (0) 8333 946 17 67', @@ -70,7 +70,7 @@ return array ( 'to_privacy_policy' => 'declaracion de privacidad', 'we_will_get_back_to_you' => 'Le contactaremos inmediatamente.', 'welcome' => 'bienvenido', - 'welcome_copy' => 'Espero su visita a mi tienda online MIVITA. Soy tu consejo personal sobre los productos y su aplicación.', + 'welcome_copy' => 'Espero su visita a mi tienda online MIVITA. Soy tu asesor personal sobre los productos y su aplicación.', 'yes' => 'SÍ', 'you_are_now_in_shop' => 'Estás en la tienda:', 'you_are_now_in_shop_notice' => 'Nota importante: Los pedidos en el país seleccionado solo se pueden enviar dentro de ese país. Si cambia su país, se cerrará su sesión actual y se vaciará su carrito de compras.', diff --git a/resources/views/admin/abo/_detail.blade.php b/resources/views/admin/abo/_detail.blade.php new file mode 100644 index 0000000..62fe806 --- /dev/null +++ b/resources/views/admin/abo/_detail.blade.php @@ -0,0 +1,109 @@ + + +
    +
    +
    +
    {{ __('tables.start_date') }}
    + {{ $user_abo->start_date }} +
    +
    +
    {{ __('tables.next_date') }}
    + {{ $user_abo->next_date }} +
    +
    +
    {{ __('tables.abo_delivery_day') }}
    + {{ \App\Services\HTMLHelper::getAboStrLang($user_abo->abo_interval) }} +
    +
    +
    {{ __('tables.last_date') }}
    + {{ $user_abo->last_date }} +
    + +
    +
    +
    +
    +
    +
    +
    {{ __('tables.status') }} / {{ __('tables.active') }}
    + {!! $user_abo->getStatusFormated() !!}  {!! get_active_badge($user_abo->active) !!} +
    +
    +
    {{ __('tables.abo_delivery') }}
    + {{ $user_abo->getCountOrders() }} + +
    + +
    +
    {{ __('tables.payment') }}
    + {{ $user_abo->getPaymentType() }} +
    +
    +
    {{ __('tables.amount') }}
    + {{ $user_abo->getFormattedAmount() }} € +
    +
    +
    + +
    + @if($isAdmin) +
    +
    +
    + +
    + +
    + +
    +
    {{ __('tables.is_for') }}
    + {!! $user_abo->getIsForFormated() !!} + @if($user_abo->is_for === 'me') + + + @endif + + @if($user_abo->is_for === 'ot') + + @endif +
    + +
    +
    + @else +
    +
    +
    + +
    + +
    + {!! $user_abo->getIsForFormated() !!} + @if($user_abo->is_for === 'me') + + + @endif + + @if($user_abo->is_for === 'ot') + + @endif +
    +
    +
    + @endif + + + \ No newline at end of file diff --git a/resources/views/admin/abo/_executions.blade.php b/resources/views/admin/abo/_executions.blade.php new file mode 100644 index 0000000..e35053d --- /dev/null +++ b/resources/views/admin/abo/_executions.blade.php @@ -0,0 +1,109 @@ + +
    +
    + {{ __('navigation.abo') }} {{ __('tables.executions') }} +
    + + +
    + + + + + + + + + + + + + + + + + + + @if($user_abo->user_abo_orders) + @foreach($user_abo->user_abo_orders()->orderBy('id', 'desc')->get() as $user_abo_order) + @if($user_abo_order->shopping_order) + + + + + + + + + + + + + + + + @endif + @endforeach + @endif + +
    #{{__('tables.date')}}{{__('tables.amount')}}{{__('tables.payment')}}{{__('tables.status')}}{{__('tables.shipping')}}{{__('tables.art')}}{{__('tables.invoice')}}{{__('tables.firstname')}}{{__('tables.lastname')}}{{__('tables.email')}}{{__('tables.status')}}{{__('tables.rf_no')}}
    + @if($isAdmin) + @if($user_abo->is_for === 'me') + {!! ''.$user_abo_order->shopping_order_id.'' !!} + @endif + @if($user_abo->is_for === 'ot') + {!! ''.$user_abo_order->shopping_order_id.'' !!} + @endif + @else + @if($user_abo->is_for === 'me') + {!! ''.$user_abo_order->shopping_order_id.'' !!} + @endif + @if($user_abo->is_for === 'ot') + {!! ''.$user_abo_order->shopping_order_id.'' !!} + @endif + @endif + + {!! $user_abo_order->shopping_order->created_at->format("d.m.Y H:i") !!} + + {!! $user_abo_order->shopping_order->getFormattedTotalShipping() !!} € + + {!! $user_abo_order->shopping_order->getLastShoppingPayment('getPaymentType'); !!} + + {!! \App\Services\Payment::getShoppingOrderBadge($user_abo_order->shopping_order) !!} + + {!! ''.$user_abo_order->shopping_order->getShippedType().'' !!} + + {!! ''.$user_abo_order->shopping_order->getPaymentForType().'' !!} + + @if($user_abo_order->shopping_order->isInvoice()) + {!! ' + ' !!} + @endif + + {{ $user_abo_order->shopping_order->shopping_user->shipping_firstname }} + + {{ $user_abo_order->shopping_order->shopping_user->shipping_lastname }} + + {{ $user_abo_order->shopping_order->shopping_user->shipping_email }} + + {!! $user_abo_order->getStatusFormated()!!} + + {{ $user_abo_order->shopping_order->getLastShoppingPayment('reference') }} +
    +
    +
    \ No newline at end of file diff --git a/resources/views/admin/abo/_order_abo.blade.php b/resources/views/admin/abo/_order_abo.blade.php new file mode 100644 index 0000000..175a9c7 --- /dev/null +++ b/resources/views/admin/abo/_order_abo.blade.php @@ -0,0 +1,123 @@ + + + +
    +
    + {{ __('abo.abo_order_hl') }} +
    +

    {{ __('abo.abo_order_info') }}

    +
    + @include('user.abo.vat_info') + + + +
    + @include('admin.abo._order_abo_show') +
    +
    + \ No newline at end of file diff --git a/resources/views/admin/abo/_order_abo_show.blade.php b/resources/views/admin/abo/_order_abo_show.blade.php new file mode 100644 index 0000000..93a1ea6 --- /dev/null +++ b/resources/views/admin/abo/_order_abo_show.blade.php @@ -0,0 +1,93 @@ +@if(isset($error_message) && $error_message) +
    {{ $error_message }}
    +@endif +
    + + + + + + + + + + @if($user_abo->user_abo_items) + @foreach($user_abo->user_abo_items as $abo_item) + @if(!$abo_item->comp) + + + + + + + + @endif + @endforeach + @endif + + + + + + + + + + + + + + + + + + @if(Yard::instance('shopping')->getUserTaxFree()) + + + + + @else + + + + + + + + + @endif + + + + + +
    #{{__('order.article')}}{{__('tables.quantity')}} {{ __('tables.price') }}
    + @if(count($abo_item->product->images)) + + @endif + + {{ $abo_item->product->getLang('name') }} +   {!! get_abo_type_badge_by_product($abo_item->product) !!} +
    +
    {{ __('order.content') }}: {{ $abo_item->product->contents }}
    +
    {{ __('order.art_no') }}: {{ $abo_item->product->number }}
    +
    + +
    +
    +
    + + + + + + + +
    +
    +
    +
    {{ $abo_item->getFormattedTotalPrice() }} €
    +

    {{ __('order.subtotal') }}:{{ Yard::instance('shopping')->subtotal() }} €
    {{ __('Delivery country') }}:{{ Yard::instance('shopping')->getShippingCountryName() }}
    {{ __('order.shipping_costs') }}:{{ Yard::instance('shopping')->shipping() }} €
    {{ __('order.sum_net') }}:{{ Yard::instance('shopping')->subtotalWithShipping() }} €
    {{ __('order.total_without_VAT') }}:{{ Yard::instance('shopping')->subtotalWithShipping() }} €
    {{ __('order.plus_VAT') }}:{{ Yard::instance('shopping')->taxWithShipping() }} €
    {{ __('order.total_sum') }}:{{ Yard::instance('shopping')->totalWithShipping() }} €
    +
    \ No newline at end of file diff --git a/resources/views/admin/abo/detail.blade.php b/resources/views/admin/abo/detail.blade.php new file mode 100644 index 0000000..38a6b01 --- /dev/null +++ b/resources/views/admin/abo/detail.blade.php @@ -0,0 +1,61 @@ +@extends('layouts.layout-2') + +@section('content') + +

    + {{ __('back') }} + {{ __('navigation.abo') }} {{ '#'.$user_abo->payone_userid }} +

    + + +@if(Session::has('alert-error')) +
    +
    +
      +
    • {{ Session::get('alert-error') }}
    • +
    +
    +
    +@endif +
    + @include('admin.abo._detail') +
    +
    + @include('admin.customer._customer_detail', ['shopping_user' => $customer_detail]) +
    + + {!! Form::open(['url' => route('user_abos_update', [$view, $user_abo->id]), 'class' => 'form-horizontal', 'id'=>'cart-order-form']) !!} + +
    + @include('admin.abo._order_abo') +
    + + @if($comp_products && Yard::instance('shopping')->getNumComp() > 0) +
    + @include('user.order.comp_product') +
    + @endif + +{{ Form::close() }} + +
    + @include('admin.abo._executions') +
    + + + {{ __('back') }} + + + +@endsection + +@section('scripts') + + +@endsection \ No newline at end of file diff --git a/resources/views/admin/abo/index.blade.php b/resources/views/admin/abo/index.blade.php new file mode 100644 index 0000000..77906ba --- /dev/null +++ b/resources/views/admin/abo/index.blade.php @@ -0,0 +1,118 @@ +@extends('layouts.layout-2') + +@section('content') + + +

    + {{ __('Abos') }} +

    +
    + {{-- +
    +
    +
    + + + +
    + + + +
    + + +
    + +
    + + + +
    +
    +
    + --}} +
    + + + + + + + + + + + + + + + + + + + + + +
    #{{__('tables.start_date')}}{{__('tables.next_date')}}{{__('tables.abo_delivery_day')}}{{__('tables.status')}}{{__('tables.active')}}{{__('tables.is_for')}}{{__('First name')}}{{__('Last name')}}{{__('E-Mail')}}{{__('tables.exc')}}{{__('tables.amount')}}{{__('tables.payment')}}{{__('tables.adviser')}}{{__('PayOneID')}}
    +
    +
    + +@endsection \ No newline at end of file diff --git a/resources/views/admin/abo/modal_abo_update.blade.php b/resources/views/admin/abo/modal_abo_update.blade.php new file mode 100644 index 0000000..cfcf99b --- /dev/null +++ b/resources/views/admin/abo/modal_abo_update.blade.php @@ -0,0 +1,88 @@ +{!! Form::open(['url' => $route, 'class' => 'modal-content', 'enctype' => 'multipart/form-data']) !!} + + + + +{!! Form::close() !!} + + + diff --git a/resources/views/admin/category/products.blade.php b/resources/views/admin/category/products.blade.php index d423615..c121f7e 100644 --- a/resources/views/admin/category/products.blade.php +++ b/resources/views/admin/category/products.blade.php @@ -41,7 +41,7 @@ @else   |   @endif -   |  {!! implode($product_category->product->getShowOnTypes(), ' / ') !!} +   |  {!! implode(' / ', $product_category->product->getShowOnTypes()) !!}   |   @else - diff --git a/resources/views/admin/customer/_customer_detail.blade.php b/resources/views/admin/customer/_customer_detail.blade.php index 0c7403d..7c1154a 100644 --- a/resources/views/admin/customer/_customer_detail.blade.php +++ b/resources/views/admin/customer/_customer_detail.blade.php @@ -47,6 +47,10 @@
    {{ __('Phone') }}
    {{ $shopping_user->billing_phone }}
    +
    +
    {{ __('E-Mail') }}
    + @if($shopping_user->faker_mail) "-" @else {{ $shopping_user->billing_email }} @endif +

    diff --git a/resources/views/admin/customer/_detail.blade.php b/resources/views/admin/customer/_detail.blade.php index 2c86068..84eb564 100644 --- a/resources/views/admin/customer/_detail.blade.php +++ b/resources/views/admin/customer/_detail.blade.php @@ -90,8 +90,8 @@
    {{ __('customer.about_shop') }}
    - @if($shopping_user->shopping_order) - @if($shopping_user->shopping_order->user_shop->user->isActive() && $shopping_user->shopping_order->user_shop->user->isActiveShop()) + @if($shopping_user->shopping_order && $shopping_user->shopping_order->user_shop) + @if($shopping_user->shopping_order->user_shop->user && $shopping_user->shopping_order->user_shop->user->isActive() && $shopping_user->shopping_order->user_shop->user->isActiveShop()) {{$shopping_user->shopping_order->user_shop->getSubdomain(false)}} @else {{$shopping_user->shopping_order->user_shop->getSubdomain(false)}} @@ -195,7 +195,6 @@ @endif @endif -
    @endif + +
    +
    + {{ __('tables.previous_orders') }} +
    +
    + + + + + + + + + + + @if($shopping_user->shopping_order) + @forelse($shopping_user->getAllOrdersByMember() as $shopping_order) + + + + + + + + + @empty + + + + @endforelse + @endif + +
    #{{__('tables.date')}}{{__('tables.amount')}}{{__('tables.status')}}{{__('tables.shipping')}}{{__('tables.art')}}
    + + + + {{ $shopping_order->created_at->format('d.m.Y') }} + + {{ $shopping_order->getFormattedTotalShipping() }} € + + {!! \App\Services\Payment::getShoppingOrderBadge($shopping_order) !!} + + {{ $shopping_order->getShippedType() }} + + {!! \App\Services\Payment::getPaymentForBadge($shopping_order) !!}
    {{ __('order.no_orders_found') }}
    +
    +
    +
    \ No newline at end of file diff --git a/resources/views/admin/modal/show_user_customers.blade.php b/resources/views/admin/modal/show_user_customers.blade.php index a6752e2..8dcc1c0 100644 --- a/resources/views/admin/modal/show_user_customers.blade.php +++ b/resources/views/admin/modal/show_user_customers.blade.php @@ -21,8 +21,6 @@ {{ __('City') }} {{ __('Country') }} {{__('Käufe')}} - {{__('Newsletter')}} - {{__('erstellt')}} {{__('tables.status')}} {{__('ID Kunden')}} WP @@ -43,7 +41,7 @@ url: '{!! route( 'user_customer_datatable') !!}', data: function(d) { // d.filter_member_id = $('select[name=filter_member_id]').val(); - d.isfor = "{{ $data['isfor'] }}"; + d.isfor = "{{ $data['isfor'] }}"; } }, "order": [[0, "desc" ]], @@ -58,8 +56,6 @@ { data: 'billing_city', name: 'billing_city' }, { data: 'billing_country_id', name: 'billing_country_id' }, { data: 'orders', name: 'orders' }, - { data: 'subscribed', name: 'subscribed' }, - { data: 'first_created_at', name: 'first_created_at' }, {data: 'status', name: 'status', searchable: false, orderable: false }, { data: 'number', name: 'number'}, { data: 'extras', name: 'extras', searchable: false, orderable: false}, @@ -75,6 +71,5 @@ });
    - - +
    \ No newline at end of file diff --git a/resources/views/admin/payment/credit_detail.blade.php b/resources/views/admin/payment/credit_detail.blade.php index e81b3d1..20f418e 100644 --- a/resources/views/admin/payment/credit_detail.blade.php +++ b/resources/views/admin/payment/credit_detail.blade.php @@ -90,6 +90,78 @@
    @endif + + {{-- Eigene Marge --}} + @if (isset($collection->own_order[$date])) + @php($order = $collection->own_order[$date]) + @if (isset($cbot)) +
    + + + + + + + +
    + {{ __('team.own') }} {{ __('tables.margin') }} + + + {{ formatNumber($cbot->business_user->getSalesVolumeTotalMargin()) }} + € +   + ({{ __('team.net_turnover') }}: + {{ formatNumber($cbot->business_user->sales_volume_total) }} € / + {{ $cbot->business_user->margin }} %) +
    + {{ __('team.consultant_margin_info') }} +
    +
    + @endif +
    + + + + + + + + + + + + @foreach ($order->user_sales_volumes as $user_sales_volume) + + + + + + + + @endforeach + + + + + + + + + + +
    {{ __('tables.date') }}{{ __('tables.net_sales') }}{{ __('tables.margin') }} %{{ __('tables.margin') }} €{{ __('tables.order') }}
    {{ $user_sales_volume->date }}{{ formatNumber($user_sales_volume->total_net) }} €{{ $cbot->business_user->margin }} %{{ formatNumber($user_sales_volume->caluCommissonTotalNet($cbot->business_user->margin)) }} € + {{ $user_sales_volume->shopping_order_id }} + @if ($user_sales_volume->shopping_order) +
    {{ $user_sales_volume->shopping_order->getShoppingUserFullName() }} + @endif +
    {{ __('tables.total') }}{{ formatNumber($order->credit_total_net) }} € {{ formatNumber($cbot->business_user->getSalesVolumeTotalMargin()) }} € 
    +
    +
    + @endif + + {{-- Provision Shop --}} @if (isset($collection->commission_shop[$date])) @php($cs = $collection->commission_shop[$date]) @if (isset($cbot)) @@ -159,8 +231,8 @@ - - {{ __('tables.total') }} + + {{ __('tables.total') }} {{ formatNumber($cs->user_sales_volumes_total->month_shop_total_net) }} €   {{ formatNumber($cbot->business_user->commission_shop_sales) }} € @@ -173,78 +245,9 @@ @endif - @if (isset($collection->own_order[$date])) - @php($order = $collection->own_order[$date]) - @if (isset($cbot)) -
    - - - - - - - -
    - {{ __('team.own') }} {{ __('tables.margin') }} - - - {{ formatNumber($cbot->business_user->getSalesVolumeTotalMargin()) }} - € -   - ({{ __('team.net_turnover') }}: - {{ formatNumber($cbot->business_user->sales_volume_total) }} € / - {{ $cbot->business_user->margin }} %) -
    - {{ __('team.consultant_margin_info') }} -
    -
    - @endif - -
    - - - - - - - - - - - - @foreach ($order->user_sales_volumes as $user_sales_volume) - - - - - - - - @endforeach - - - - - - - - - - -
    {{ __('tables.date') }}{{ __('tables.net_sales') }}{{ __('tables.margin') }} %{{ __('tables.margin') }} €{{ __('tables.order') }}
    {{ $user_sales_volume->date }}{{ formatNumber($user_sales_volume->total_net) }} €{{ $cbot->business_user->margin }} %{{ formatNumber($user_sales_volume->caluCommissonTotalNet($cbot->business_user->margin)) }} € - {{ $user_sales_volume->shopping_order_id }} - @if ($user_sales_volume->shopping_order) -
    {{ $user_sales_volume->shopping_order->getShoppingUserFullName() }} - @endif -
    {{ __('tables.total') }} {{ formatNumber($order->credit_total_net) }} € {{ formatNumber($cbot->business_user->getSalesVolumeTotalMargin()) }} € 
    -
    -
    - - @endif - + + {{-- Points Registration @if (isset($collection->commission_registration[$date])) @php($cr = $collection->commission_registration[$date])
    @@ -288,8 +291,10 @@
    @endif + --}} + @if (isset($cbot)) - @if (isset($cbot)) + {{-- Payline Points / Provision / Wachstumsbonus
    @@ -317,6 +322,9 @@
    + --}} + + {{-- Payline Points / Provision / Wachstumsbonus
    @@ -364,6 +372,9 @@
    + --}} + + {{-- Table Payline Points / Provision / Wachstumsbonus
    @@ -404,7 +415,32 @@
    -
    +
    + --}} + + + +
    + + + @if($cbot->business_user->version == 2) + + + + + + + + + + @endif + +
    {{ __('team.commission_payline') }}: + {{ formatNumber($cbot->business_user->commission_pp_total) }} € +
    {{ __('team.commission_WB') }}: + {{ formatNumber($cbot->business_user->commission_growth_total) }} € +
    +
    diff --git a/resources/views/admin/payment_method/index.blade.php b/resources/views/admin/payment_method/index.blade.php index cd57a52..291645f 100755 --- a/resources/views/admin/payment_method/index.blade.php +++ b/resources/views/admin/payment_method/index.blade.php @@ -14,7 +14,7 @@ - + @@ -36,7 +36,7 @@ - + diff --git a/resources/views/admin/product/index.blade.php b/resources/views/admin/product/index.blade.php index 7fb27f5..b8e0560 100755 --- a/resources/views/admin/product/index.blade.php +++ b/resources/views/admin/product/index.blade.php @@ -63,7 +63,7 @@ - + diff --git a/resources/views/admin/sales/_detail_collection.blade.php b/resources/views/admin/sales/_detail_collection.blade.php index 8c371aa..bb79760 100644 --- a/resources/views/admin/sales/_detail_collection.blade.php +++ b/resources/views/admin/sales/_detail_collection.blade.php @@ -18,13 +18,13 @@ diff --git a/resources/views/emails/collection_detail.blade.php b/resources/views/emails/collection_detail.blade.php index 34457a2..b244422 100644 --- a/resources/views/emails/collection_detail.blade.php +++ b/resources/views/emails/collection_detail.blade.php @@ -14,7 +14,7 @@ {{ formatNumber($shop_item['user_price_net']) }} €
    {{__('Name')}} {{__('sichtbar') }} {{__('Standard')}}{{__('Abo')}}{{__('abo.abo')}} {{__('tables.status')}}
    {{ $value->pos }} {{ $value->name }} ({{ $value->short }}){!! implode($value->getShowOnTypes(), '
    ') !!}
    {!! implode('
    ', $value->getShowOnTypes()) !!}
    {!! get_active_badge($value->default) !!} {!! get_active_badge($value->is_abo) !!} {!! get_active_badge($value->active) !!}{{ $value->getUnitType() }} {{ $value->getBasePriceFormatted() }} {{ $value->weight }}{!! implode($value->getShowOnTypes(), '
    ') !!}
    {!! implode('
    ', $value->getShowOnTypes()) !!}
    {!! get_active_badge($value->shipping_addon) !!} {!! get_active_badge($value->no_commission) !!} {!! get_active_badge($value->no_free_shipping) !!} - {{$shop_item['points_total']}} + {{ number_format($shop_item['points_total'], 0) }} {{ formatNumber($shop_item['user_price_net']) }} € - {{$shop_item['qty']}} + {{ number_format($shop_item['qty'], 0) }} @@ -72,12 +72,12 @@ {{ __('order.sums') }} - {{ $shopping_order->shopping_collect_order->points }} + {{ number_format($shopping_order->shopping_collect_order->points, 0) }} - {{ $shopping_order->shopping_collect_order->qty_total }} + {{ number_format($shopping_order->shopping_collect_order->qty_total, 0) }} {{ formatNumber($shopping_order->shopping_collect_order->price_total_net) }} € diff --git a/resources/views/admin/sales/_detail_shopping_order.blade.php b/resources/views/admin/sales/_detail_shopping_order.blade.php index 342e3d1..6b2c173 100644 --- a/resources/views/admin/sales/_detail_shopping_order.blade.php +++ b/resources/views/admin/sales/_detail_shopping_order.blade.php @@ -25,12 +25,19 @@ @endif
    - {{ $shopping_order_item->product->getLang('name') }} - #{{ $shopping_order_item->product->number }} + + {{ $shopping_order_item->product->getLang('name') }} + @if($shopping_order->is_abo) +   {!! get_abo_type_badge_by_product($shopping_order_item->product) !!} + @endif + + + {{ __('order.content') }}: {{ $shopping_order_item->product->contents }}
    {{ __('order.weight') }}: {{ $shopping_order_item->product->weight }} g
    - {{ __('order.points') }}: {{ $shopping_order_item->product->points }} + {{ __('order.points') }}: {{ $shopping_order_item->product->points }}
    + {{ __('order.number') }}: {{ $shopping_order_item->product->number }}
    @endif diff --git a/resources/views/admin/sales/customers.blade.php b/resources/views/admin/sales/customers.blade.php index 9aa9652..fe2e93f 100644 --- a/resources/views/admin/sales/customers.blade.php +++ b/resources/views/admin/sales/customers.blade.php @@ -43,7 +43,6 @@ -
    diff --git a/resources/views/admin/settings/index.blade.php b/resources/views/admin/settings/index.blade.php index 0cce25e..79ad556 100755 --- a/resources/views/admin/settings/index.blade.php +++ b/resources/views/admin/settings/index.blade.php @@ -21,7 +21,7 @@ {{ Form::hidden('settings[is_comp_me_abo][type]', 'bool') }} diff --git a/resources/views/emails/checkout.blade.php b/resources/views/emails/checkout.blade.php index 4940cc9..804bdb3 100644 --- a/resources/views/emails/checkout.blade.php +++ b/resources/views/emails/checkout.blade.php @@ -145,10 +145,12 @@ {!! nl2br($copy1line) !!} - @@ -189,306 +191,317 @@ - - - + @if($shopping_order->shopping_user->is_from !== 'extern') - - @if($send_link) - - - - - - - @endif - - - - - - - @@ -236,18 +245,42 @@ @endif - + @if($shopping_order->is_abo) - + + + + @endif + - - - - - -


    + @if($shopping_order->is_abo) + {{ __('abo.abo') }} / + @endif @if($shopping_order->shopping_user->is_from === 'user_order') @if($shopping_order->shopping_user->is_for === 'me') {{__('email.checkout_mail_order_for_me')}} @@ -173,7 +175,7 @@ {{__('email.checkout_mail_order_for_extern')}} @endif @if($shopping_order->shopping_user->is_from === 'collection') - Berater Sammelrechnung
    + Berater Sammelrechnung @endif
    -
    -
    -
    - - - - - - -
    - - - - - - - - - -
    -

    - {{ $button }} -

    -
    - {{ $url }} -
    -
    -
    -
    -
    -
    - {{__('email.checkout_mail_pay_info')}} -
    - + @if($send_link) + + - - - - + + + + @endif + @if($shopping_order->is_abo) - - - - - - - - - - - - @else - @if($shopping_order->wp_invoice_path) - - - - @endif - @if($shopping_order->api_notice['wp_advertising']) + @endif + + + + + + + + + + + + + + + + + + + + + + + + @else + @if($shopping_order->wp_invoice_path) + + + + @endif + @if($shopping_order->api_notice['wp_advertising']) - @endif + @endif + @if($shopping_order->api_notice['wp_incentives']) - - - - - - - - - - - - + + + + + + + + + + @endif -
    +
    + + - +
    - {{__('email.checkout_mail_pay_success')}}
    - @if($shopping_payment) - {{__('email.checkout_mail_pay_with')}} {{$shopping_payment->getPaymentType()}}
    - {{__('email.checkout_mail_pay_ref')}} {{$shopping_payment->reference}}
    - @endif - {{__('email.checkout_mail_your_mail')}} {{ $shopping_order->shopping_user->billing_email }}
    +
    + + + + + + + + + +
    +

    + {{ $button }} +

    +
    + {{ $url }} +
    -
    -
    -
    - {{__('email.checkout_mail_invoice_addess')}} -
    - - - - - -
    - @if($shopping_order->shopping_user->billing_company) - {{ $shopping_order->shopping_user->billing_company }}
    - @endif - {{ $shopping_order->shopping_user->billing_firstname }} - {{ $shopping_order->shopping_user->billing_lastname }}
    - {{ $shopping_order->shopping_user->billing_address }}
    - @if($shopping_order->shopping_user->billing_address_2) - {{ $shopping_order->shopping_user->billing_address_2 }}
    - @endif - {{ $shopping_order->shopping_user->billing_zipcode }} - {{ $shopping_order->shopping_user->billing_city }}
    - {{ $shopping_order->shopping_user->billing_country->getLocated() }}
    - @if($shopping_order->shopping_user->billing_phone) -
    {{ $shopping_order->shopping_user->billing_phone }}
    - @endif -
    -
    - @if($shopping_order->shopping_user->is_from === 'user_order') - @if($shopping_order->shopping_user->is_for === 'me') - {{__('email.checkout_mail_deliver_addess')}} - @else - {{__('email.checkout_mail_deliver_customer')}} - @endif - @else - {{__('email.checkout_mail_deliver_addess')}} - @endif +

    + {{ __('abo.checkout_mail_abo_hl') }}
    - + @php($user_abo = $shopping_order->getUserAbo()) + @if($user_abo) +
    -
    - @if($shopping_order->shopping_user->same_as_billing) - {{__('email.checkout_mail_same_address')}} - @else - @if($shopping_order->shopping_user->shipping_company) - {{ $shopping_order->shopping_user->shipping_company }}
    - @endif - {{ $shopping_order->shopping_user->shipping_firstname }} - {{ $shopping_order->shopping_user->shipping_lastname }}
    - {{ $shopping_order->shopping_user->shipping_address }}
    - @if($shopping_order->shopping_user->shipping_address_2) - {{ $shopping_order->shopping_user->shipping_address_2 }}
    - @endif - {{ $shopping_order->shopping_user->shipping_zipcode }} - {{ $shopping_order->shopping_user->shipping_city }}
    - {{ $shopping_order->shopping_user->shipping_country->getLocated() }}
    - @if($shopping_order->shopping_user->shipping_phone) -
    {{ $shopping_order->shopping_user->shipping_phone }}
    - @endif + @if($shopping_order->abo_interval) + {{__('abo.checkout_mail_abo_start')}}
    + {{__('tables.start_date')}}: {{ $user_abo->start_date }}
    @endif + {{__('tables.next_date')}}: {{ $user_abo->next_date }}
    + {{__('tables.abo_delivery_day')}}: {{ \App\Services\HTMLHelper::getAboStrLang($user_abo->abo_interval) }}
    + {{ __('abo.checkout_mail_abo_info') }}
    + @endif
    -
    -
    - - - - - - - -
    - {{ $copy3line }} -
    - @if($shopping_order->member) - @if($shopping_order->member->shop && $shopping_order->member->isActiveShop()) - @if($shopping_order->member->shop->title) - {{ $shopping_order->member->shop->title }}
    - @endif - @if($shopping_order->member->shop->contact) - {!! nl2br($shopping_order->member->shop->contact) !!}
    - @endif - {{ $shopping_order->member->shop->getSubdomain(true) }} - @else - Dein Berater: {{$shopping_order->member->getFullName()}} - @endif - @endif -

    - {{ $greetings }}
    {{ $sender }} -
    -

    -
    - Rechnung: {{$shopping_order->wp_invoice_path}}
    -
    -
    +

    + {{__('email.checkout_mail_pay_info')}} +
    + - + +
    - Werbemittel: {!! $shopping_order->api_notice['wp_advertising'] !!}
    -
    +
    + {{__('email.checkout_mail_pay_success')}}
    + @if($shopping_payment) + {{__('email.checkout_mail_pay_with')}} {{$shopping_payment->getPaymentType()}}
    + {{__('email.checkout_mail_pay_ref')}} {{$shopping_payment->reference}}
    + @endif + {{__('email.checkout_mail_your_mail')}} {{ $shopping_order->shopping_user->billing_email }}
    +
    +

    + {{__('email.checkout_mail_invoice_addess')}} +
    + - @endif - @if($shopping_order->api_notice['wp_incentives']) + + +
    + @if($shopping_order->shopping_user->billing_company) + {{ $shopping_order->shopping_user->billing_company }}
    + @endif + {{ $shopping_order->shopping_user->billing_firstname }} + {{ $shopping_order->shopping_user->billing_lastname }}
    + {{ $shopping_order->shopping_user->billing_address }}
    + @if($shopping_order->shopping_user->billing_address_2) + {{ $shopping_order->shopping_user->billing_address_2 }}
    + @endif + {{ $shopping_order->shopping_user->billing_zipcode }} + {{ $shopping_order->shopping_user->billing_city }}
    + {{ $shopping_order->shopping_user->billing_country->getLocated() }}
    + @if($shopping_order->shopping_user->billing_phone) +
    {{ $shopping_order->shopping_user->billing_phone }}
    + @endif +
    +
    + @if($shopping_order->shopping_user->is_from === 'user_order') + @if($shopping_order->shopping_user->is_for === 'me') + {{__('email.checkout_mail_deliver_addess')}} + @else + {{__('email.checkout_mail_deliver_customer')}} + @endif + @else + {{__('email.checkout_mail_deliver_addess')}} + @endif +
    + + + + + +
    + @if($shopping_order->shopping_user->same_as_billing) + {{__('email.checkout_mail_same_address')}} + @else + @if($shopping_order->shopping_user->shipping_company) + {{ $shopping_order->shopping_user->shipping_company }}
    + @endif + {{ $shopping_order->shopping_user->shipping_firstname }} + {{ $shopping_order->shopping_user->shipping_lastname }}
    + {{ $shopping_order->shopping_user->shipping_address }}
    + @if($shopping_order->shopping_user->shipping_address_2) + {{ $shopping_order->shopping_user->shipping_address_2 }}
    + @endif + {{ $shopping_order->shopping_user->shipping_zipcode }} + {{ $shopping_order->shopping_user->shipping_city }}
    + {{ $shopping_order->shopping_user->shipping_country->getLocated() }}
    + @if($shopping_order->shopping_user->shipping_phone) +
    {{ $shopping_order->shopping_user->shipping_phone }}
    + @endif + @endif +
    +
    +
    +
    + + + + + + + +
    + {{ $copy3line }} +
    + @if($shopping_order->member) + @if($shopping_order->member->shop && $shopping_order->member->isActiveShop()) + @if($shopping_order->member->shop->title) + {{ $shopping_order->member->shop->title }}
    + @endif + @if($shopping_order->member->shop->contact) + {!! nl2br($shopping_order->member->shop->contact) !!}
    + @endif + {{ $shopping_order->member->shop->getSubdomain(true) }} + @else + Dein Berater: {{$shopping_order->member->getFullName()}} + @endif + @endif +

    + {{ $greetings }}
    {{ $sender }} +
    +

    +
    + Rechnung: {{$shopping_order->wp_invoice_path}}
    +
    +
    - Incentives: {!! $shopping_order->api_notice['wp_incentives'] !!}
    -
    + Werbemittel: {!! $shopping_order->api_notice['wp_advertising'] !!}
    +
    - {{__('email.checkout_mail_deliver_customer')}} + Incentives: {!! $shopping_order->api_notice['wp_incentives'] !!}
    +
    - - - - -
    - @if($shopping_order->shopping_user->same_as_billing) - @if($shopping_order->shopping_user->billing_company) - {{ $shopping_order->shopping_user->billing_company }}
    - @endif - - {{ $shopping_order->shopping_user->billing_firstname }} - {{ $shopping_order->shopping_user->billing_lastname }}
    -
    - - {{ $shopping_order->shopping_user->billing_address }}
    - @if($shopping_order->shopping_user->billing_address_2) - {{ $shopping_order->shopping_user->billing_address_2 }}
    - @endif - - {{ $shopping_order->shopping_user->billing_zipcode }} - {{ $shopping_order->shopping_user->billing_city }}
    - {{ $shopping_order->shopping_user->billing_country->getLocated() }}
    - - @if($shopping_order->shopping_user->billing_phone) -

    {{ $shopping_order->shopping_user->billing_phone }}
    - @endif - @else - @if($shopping_order->shopping_user->shipping_company) - {{ $shopping_order->shopping_user->shipping_company }}
    - @endif - - {{ $shopping_order->shopping_user->shipping_firstname }} - {{ $shopping_order->shopping_user->shipping_lastname }}
    -
    - - {{ $shopping_order->shopping_user->shipping_address }}
    - @if($shopping_order->shopping_user->shipping_address_2) - {{ $shopping_order->shopping_user->shipping_address_2 }}
    - @endif - - {{ $shopping_order->shopping_user->shipping_zipcode }} - {{ $shopping_order->shopping_user->shipping_city }}
    - - {{ $shopping_order->shopping_user->shipping_country->getLocated() }}
    - - @if($shopping_order->shopping_user->shipping_phone) -

    {{ $shopping_order->shopping_user->shipping_phone }}
    - @endif - @endif -
    -
    -
    -
    - {{__('email.checkout_copy3line_extern')}} -
    - - - + + + + - + {{ $shopping_order->shopping_user->billing_firstname }} + {{ $shopping_order->shopping_user->billing_lastname }}
    +
    + {{ $shopping_order->shopping_user->billing_address }}
    + @if($shopping_order->shopping_user->billing_address_2) + {{ $shopping_order->shopping_user->billing_address_2 }}
    + @endif + + {{ $shopping_order->shopping_user->billing_zipcode }} + {{ $shopping_order->shopping_user->billing_city }}
    + {{ $shopping_order->shopping_user->billing_country->getLocated() }}
    + + @if($shopping_order->shopping_user->billing_phone) +

    {{ $shopping_order->shopping_user->billing_phone }}
    + @endif + @else + @if($shopping_order->shopping_user->shipping_company) + {{ $shopping_order->shopping_user->shipping_company }}
    + @endif + + {{ $shopping_order->shopping_user->shipping_firstname }} + {{ $shopping_order->shopping_user->shipping_lastname }}
    +
    + + {{ $shopping_order->shopping_user->shipping_address }}
    + @if($shopping_order->shopping_user->shipping_address_2) + {{ $shopping_order->shopping_user->shipping_address_2 }}
    + @endif + + {{ $shopping_order->shopping_user->shipping_zipcode }} + {{ $shopping_order->shopping_user->shipping_city }}
    + + {{ $shopping_order->shopping_user->shipping_country->getLocated() }}
    + + @if($shopping_order->shopping_user->shipping_phone) +

    {{ $shopping_order->shopping_user->shipping_phone }}
    + @endif + @endif + + +
    - - @if($shopping_order->member) - Berater: {{ \App\Services\HTMLHelper::getSalutationLang($shopping_order->member->account->m_salutation) }} {{ $shopping_order->member->account->m_first_name }} {{ $shopping_order->member->account->m_last_name }} -
    - Berater-ID: {{ $shopping_order->member->account->m_account }}
    - @if($shopping_order->member->user_level) - Karriere-Level: {{ $shopping_order->member->user_level->getLang('name') }}
    - @endif + @endif +
    + {{__('email.checkout_mail_deliver_customer')}} +
    + + + - - - - -
    + @if($shopping_order->shopping_user->same_as_billing) + @if($shopping_order->shopping_user->billing_company) + {{ $shopping_order->shopping_user->billing_company }}
    @endif -

    -
    +
    +
    +
    + {{__('email.checkout_copy3line_extern')}} +
    + + + + + + + +
    + + @if($shopping_order->member) + Berater: {{ \App\Services\HTMLHelper::getSalutationLang($shopping_order->member->account->m_salutation) }} {{ $shopping_order->member->account->m_first_name }} {{ $shopping_order->member->account->m_last_name }} +
    + Berater-ID: {{ $shopping_order->member->account->m_account }}
    + @if($shopping_order->member->user_level) + Karriere-Level: {{ $shopping_order->member->user_level->getLang('name') }}
    + @endif + @endif + +

    +
    -
    {{__('email.checkout_mail_status_info')}} @@ -182,21 +181,31 @@ {{__('email.checkout_mail_pay_invoice_open')}}
    @else {{__('email.checkout_mail_system_status')}} {{$txaction}}
    - @endif {{__('email.checkout_mail_pay_with')}} {{$shopping_payment->getPaymentType()}}
    {{__('email.checkout_mail_pay_ref')}} {{$shopping_payment->reference}}
    {{__('email.checkout_mail_your_mail')}} {{ $shopping_order->shopping_user->billing_email }}
    + + @if($txaction === 'error' && isset($payment_error)) +
    + + @if(isset($payment_error['errorcode'])) {{ $payment_error['errorcode'] }} | @endif + @if(isset($payment_error['errormessage'])) {{ $payment_error['errormessage'] }} @endif +
    + @if(isset($payment_error['customermessage'])) {{ $payment_error['customermessage'] }} @endif +
    + @endif


    + @if($shopping_order->is_abo) + {{ __('abo.abo') }} / + @endif @if($shopping_order->shopping_user->is_from === 'user_order') @if($shopping_order->shopping_user->is_for === 'me') {{__('email.checkout_mail_order_for_me')}} @@ -221,7 +230,7 @@ {{__('email.checkout_mail_order_for_extern')}} @endif @if($shopping_order->shopping_user->is_from === 'collection') - Berater Sammelrechnung
    + Berater Sammelrechnung @endif
    -
    +
    +

    + {{ __('abo.checkout_mail_abo_hl') }}
    + @php($user_abo = $shopping_order->getUserAbo()) + @if($user_abo) + + + + +
    + @if($shopping_order->abo_interval) + {{__('abo.checkout_mail_abo_start')}}
    + {{__('tables.start_date')}}: {{ $user_abo->start_date }}
    + @endif + {{__('tables.next_date')}}: {{ $user_abo->next_date }}
    + {{__('tables.abo_delivery_day')}}: {{ \App\Services\HTMLHelper::getAboStrLang($user_abo->abo_interval) }}
    + {{ __('abo.checkout_mail_abo_info') }} +
    + @endif +
    +

    {{__('email.checkout_mail_invoice_addess')}}
    +
    @@ -271,14 +304,9 @@
    -
    -
    +

    @if($shopping_order->shopping_user->is_from === 'user_order') @if($shopping_order->shopping_user->is_for === 'me') {{__('email.checkout_mail_deliver_addess')}} @@ -316,7 +344,6 @@ @endif
    - {{$shop_item['qty']}} + {{ number_format($shop_item['qty'], 0) }} {{ formatNumber($shop_item['user_price_total_net']) }} € diff --git a/resources/views/emails/custom_payment_detail.blade.php b/resources/views/emails/custom_payment_detail.blade.php index a571d74..11fc26d 100644 --- a/resources/views/emails/custom_payment_detail.blade.php +++ b/resources/views/emails/custom_payment_detail.blade.php @@ -16,7 +16,7 @@ @foreach($yard_shopping_items['items'] as $items)
    - {{ $items->name }} + {{ $items->name }} @if($items->abo_type) {{ __('abo.abo') }} {{ __('abo.'.$items->abo_type) }} @endif @if($yard_shopping_items['tax_free']) diff --git a/resources/views/layouts/includes/layout-sidenav.blade.php b/resources/views/layouts/includes/layout-sidenav.blade.php index 8a3128c..7475396 100755 --- a/resources/views/layouts/includes/layout-sidenav.blade.php +++ b/resources/views/layouts/includes/layout-sidenav.blade.php @@ -13,7 +13,7 @@ @if(Auth::user()->showSideNav()) -
  • +
  • {{ __('navigation.my_account') }}
    @@ -22,6 +22,15 @@
  • {{ __('navigation.credit') }}
  • + @if(Auth::user()->isVIP()) +
  • +
    {{ __('navigation.myabo') }}
    +
    +
    VIP
    +
    +
    +
  • + @endif
  • {{ __('navigation.my_data') }}
  • @@ -35,7 +44,7 @@ @if(Auth::user()->isActiveShop()) -
  • +
  • {{ __('navigation.my_shop') }}
    @@ -84,7 +93,7 @@
  • @endif @if(Auth::user()->isActiveAccount()) -
  • +
  • {{ __('navigation.my_clients') }}
    @@ -96,6 +105,21 @@
  • {{ __('navigation.add') }}
  • +
  • +
    {{ __('navigation.orders') }}
    +
  • + + @if(Auth::user()->isVIP()) +
  • +
    {{ __('navigation.customerabos') }}
    +
    +
    VIP
    +
    +
    +
  • + @endif + + @endif @@ -112,8 +136,10 @@
  • {{ __('navigation.do_order') }}
  • +
  • +
    {{ __('navigation.payment_links') }}
    +
  • - @endif @if(Auth::user()->isActiveAccount())
  • @@ -129,7 +155,6 @@
  • @endif @if(Auth::user()->isActiveAccount()) -
  • {{ __('navigation.downloadcenter') }}
  • @@ -148,7 +173,7 @@
  • {{ __('navigation.clients') }}
  • -
  • +
  • {{ __('navigation.orders') }}
    @@ -160,6 +185,9 @@
  • {{ __('navigation.clients') }}
  • +
  • +
    {{ __('navigation.abos') }}
    +
  • @@ -169,7 +197,6 @@
    {{ __('navigation.payments') }}
      -
    • {{ __('navigation.invoice') }}
    • @@ -264,11 +291,9 @@
      • -
        {{ __('navigation.languages') }}
        -
      • -
      • -
        {{ __('navigation.translation') }}
        +
        {{ __('navigation.translation') }}
      • +
      • {{ __('navigation.products') }}
      • diff --git a/resources/views/pdf/credit_details.blade.php b/resources/views/pdf/credit_details.blade.php index 721c4b7..e4d9f00 100644 --- a/resources/views/pdf/credit_details.blade.php +++ b/resources/views/pdf/credit_details.blade.php @@ -299,7 +299,8 @@ border-bottom: 1px solid #d6d6de; } .card hr { - border-color: #d7d700; + border:#d7d700 0.2pt solid; + background-color: transparent; margin: 6mm 0; } @@ -323,6 +324,11 @@ color: #484e3e; } + .badge-info { + background-color: #28c3d7; + color: #fff; + } + .badge-secondary { background-color: #d7d700; color: #565600; @@ -452,6 +458,79 @@
        @endif + + {{-- Eigene Marge --}} + @if (isset($collection->own_order[$date])) + @php($order = $collection->own_order[$date]) + @if (isset($cbot)) +
        + + + + + + + +
        + {{ __('team.own') }} {{ __('tables.margin') }} + + + {{ formatNumber($cbot->business_user->getSalesVolumeTotalMargin()) }} + € +   + ({{ __('team.net_turnover') }}: + {{ formatNumber($cbot->business_user->sales_volume_total) }} € / + {{ $cbot->business_user->margin }} %) +
        + {{ __('team.consultant_margin_info') }} +
        +
        + @endif +
        + + + + + + + + + + + + @foreach ($order->user_sales_volumes as $user_sales_volume) + + + + + + + + @endforeach + + + + + + + + + + + +
        {{ __('tables.date') }}{{ __('tables.net_sales') }}{{ __('tables.margin') }} %{{ __('tables.margin') }} €{{ __('tables.order') }}
        {{ $user_sales_volume->date }}{{ formatNumber($user_sales_volume->total_net) }} €{{ $cbot->business_user->margin }} %{{ formatNumber($user_sales_volume->caluCommissonTotalNet($cbot->business_user->margin)) }} € + {{ $user_sales_volume->shopping_order_id }} + @if ($user_sales_volume->shopping_order) +
        {{ $user_sales_volume->shopping_order->getShoppingUserFullName() }} + @endif +
        {{ __('tables.total') }}{{ formatNumber($order->credit_total_net) }} € {{ formatNumber($cbot->business_user->getSalesVolumeTotalMargin()) }} € 
        +
        +
        + @endif + + {{-- Provision Shop --}} @if (isset($collection->commission_shop[$date])) @php($cs = $collection->commission_shop[$date]) @if (isset($cbot)) @@ -476,8 +555,6 @@
    @endif - -
    @@ -520,8 +597,8 @@ - - + + @@ -530,83 +607,9 @@
    {{ __('tables.total') }}
    {{ __('tables.total') }} {{ formatNumber($cs->user_sales_volumes_total->month_shop_total_net) }} €   {{ formatNumber($cbot->business_user->commission_shop_sales) }} €
    -
    - @endif - @if (isset($collection->own_order[$date])) - @php($order = $collection->own_order[$date]) - @if (isset($cbot)) -
    - - - - - - - -
    - {{ __('team.own') }} {{ __('tables.margin') }} - - - {{ formatNumber($cbot->business_user->getSalesVolumeTotalMargin()) }} - € -   - ({{ __('team.net_turnover') }}: - {{ formatNumber($cbot->business_user->sales_volume_total) }} € / - {{ $cbot->business_user->margin }} %) -
    - {{ __('team.consultant_margin_info') }} -
    -
    - @endif - -
    - - - - - - - - - - - - @foreach ($order->user_sales_volumes as $user_sales_volume) - - - - - - - - @endforeach - - - - - - - - - - - -
    {{ __('tables.date') }}{{ __('tables.net_sales') }}{{ __('tables.margin') }} %{{ __('tables.margin') }} €{{ __('tables.order') }}
    {{ $user_sales_volume->date }}{{ formatNumber($user_sales_volume->total_net) }} €{{ $cbot->business_user->margin }} %{{ formatNumber($user_sales_volume->caluCommissonTotalNet($cbot->business_user->margin)) }} € - {{ $user_sales_volume->shopping_order_id }} - @if ($user_sales_volume->shopping_order) -
    {{ $user_sales_volume->shopping_order->getShoppingUserFullName() }} - @endif -
    {{ __('tables.total') }} {{ formatNumber($order->credit_total_net) }} € {{ formatNumber($cbot->business_user->getSalesVolumeTotalMargin()) }} € 
    -
    -
    - - @endif - - + {{-- Points Registration @if (isset($collection->commission_registration[$date])) @php($cr = $collection->commission_registration[$date])
    @@ -648,10 +651,12 @@

    - @endif + --}} + @if (isset($cbot)) + {{-- Payline Points / Provision / Wachstumsbonus
    @@ -680,6 +685,10 @@

    + --}} + + {{-- Payline Points / Provision / Wachstumsbonus +
    @@ -726,6 +735,9 @@
    + --}} + + {{-- Table Payline Points / Provision / Wachstumsbonus
    @@ -767,7 +779,28 @@

    - + --}} +
    +
    + + + @if($cbot->business_user->version == 2) + + + + + + + + + @endif + +
    {{ __('team.commission_payline') }}: + {{ formatNumber($cbot->business_user->commission_pp_total) }} € +
    {{ __('team.commission_WB') }}: + {{ formatNumber($cbot->business_user->commission_growth_total) }} € +
    +
    @@ -785,6 +818,7 @@
    +
    @endif @endforeach
    diff --git a/resources/views/pdf/credit_details_long.blade.php b/resources/views/pdf/credit_details_long.blade.php index b716aaa..fcf7498 100644 --- a/resources/views/pdf/credit_details_long.blade.php +++ b/resources/views/pdf/credit_details_long.blade.php @@ -328,6 +328,11 @@ color: #565600; } + .badge-info { + background-color: #28c3d7; + color: #fff; + } + .badge-outline-success { background-color: #fff; border-color: #64bc40; @@ -452,6 +457,84 @@
    @endif + {{-- Eigene Marge --}} + @if (isset($collection->own_order[$date])) +
    + @php($order = $collection->own_order[$date]) + @if (isset($cbot)) +
    + + + + + + + +
    + {{ __('team.own') }} {{ __('tables.margin') }} + + + {{ formatNumber($cbot->business_user->getSalesVolumeTotalMargin()) }} + € +   + ({{ __('team.net_turnover') }}: + {{ formatNumber($cbot->business_user->sales_volume_total) }} € / + {{ $cbot->business_user->margin }} %) +
    + {{ __('team.consultant_margin_info') }} +
    +
    + @endif +
    + + + + + + + + + + + + + + + @foreach ($order->user_sales_volumes as $user_sales_volume) + + + + + + + + + + + @endforeach + + + + + + + + + +
    #{{ __('Datum') }}{{ __('Typ') }}{{ __('Umsatz netto') }}{{ __('tables.points') }}{{ __('für') }}{{ __('VE') }}{{ __('Bestellung') }}
    {{ $user_sales_volume->id }}{{ $user_sales_volume->date }}{{ $user_sales_volume->getStatusType() }}{{ formatNumber($user_sales_volume->total_net) }} €{{ $user_sales_volume->points }}{{ $user_sales_volume->getStatusPointsType() }}{{ $user_sales_volume->getStatusTurnoverType() }} + {{ $user_sales_volume->shopping_order_id }} + @if ($user_sales_volume->shopping_order) +
    {{ $user_sales_volume->shopping_order->getShoppingUserFullName() }} + @endif +
    {{ __('tables.total') }} {{ formatNumber($order->credit_total_net) }} €{{ $order->credit_total_points }}
    +
    +
    +
    + @endif + + {{-- Provision Shop --}} @if (isset($collection->commission_shop[$date]))
    @php($cs = $collection->commission_shop[$date]) @@ -544,84 +627,9 @@
    @endif - @if (isset($collection->own_order[$date])) -
    - @php($order = $collection->own_order[$date]) - @if (isset($cbot)) -
    - - - - - - - -
    - {{ __('team.own') }} {{ __('tables.margin') }} - - - {{ formatNumber($cbot->business_user->getSalesVolumeTotalMargin()) }} - € -   - ({{ __('team.net_turnover') }}: - {{ formatNumber($cbot->business_user->sales_volume_total) }} € / - {{ $cbot->business_user->margin }} %) -
    - {{ __('team.consultant_margin_info') }} -
    -
    - @endif - -
    - - - - - - - - - - - - - - - @foreach ($order->user_sales_volumes as $user_sales_volume) - - - - - - - - - - - @endforeach - - - - - - - - - -
    #{{ __('Datum') }}{{ __('Typ') }}{{ __('Umsatz netto') }}{{ __('tables.points') }}{{ __('für') }}{{ __('VE') }}{{ __('Bestellung') }}
    {{ $user_sales_volume->id }}{{ $user_sales_volume->date }}{{ $user_sales_volume->getStatusType() }}{{ formatNumber($user_sales_volume->total_net) }} €{{ $user_sales_volume->points }}{{ $user_sales_volume->getStatusPointsType() }}{{ $user_sales_volume->getStatusTurnoverType() }} - {{ $user_sales_volume->shopping_order_id }} - @if ($user_sales_volume->shopping_order) -
    {{ $user_sales_volume->shopping_order->getShoppingUserFullName() }} - @endif -
    {{ __('tables.total') }} {{ formatNumber($order->credit_total_net) }} €{{ $order->credit_total_points }}
    -
    -
    -
    - @endif + {{-- Points Registration @if (isset($collection->commission_registration[$date]))
    @php($cr = $collection->commission_registration[$date]) @@ -674,9 +682,11 @@
    @endif - + --}} @if (isset($cbot)) + + {{-- Gesamt
    @@ -706,6 +716,9 @@
    + ––}} + + {{-- Payline Points / Provision / Wachstumsbonus
    @@ -793,7 +806,9 @@
    -
    +
    + + --}}
    diff --git a/resources/views/pdf/delivery-detail.blade.php b/resources/views/pdf/delivery-detail.blade.php index 1fc3c96..a194a15 100644 --- a/resources/views/pdf/delivery-detail.blade.php +++ b/resources/views/pdf/delivery-detail.blade.php @@ -19,7 +19,7 @@ {{ maxStrLength($shopping_order_item->product->getLang('name'), 35) }} @endforeach diff --git a/resources/views/pdf/delivery-homeparty-detail.blade.php b/resources/views/pdf/delivery-homeparty-detail.blade.php index 14d2907..648b4c0 100644 --- a/resources/views/pdf/delivery-homeparty-detail.blade.php +++ b/resources/views/pdf/delivery-homeparty-detail.blade.php @@ -9,7 +9,7 @@ {{ maxStrLength($value->product->getLang('name'), 35) }} @endforeach diff --git a/resources/views/pdf/invoice-collection.blade.php b/resources/views/pdf/invoice-collection.blade.php index 13ae702..663e13b 100644 --- a/resources/views/pdf/invoice-collection.blade.php +++ b/resources/views/pdf/invoice-collection.blade.php @@ -28,13 +28,13 @@ {{ maxStrLength($shop_item['name'], 30) }}
    - {{ $shopping_order_item->qty }} + {{ cleanIntegerFromString($shopping_order_item->qty) }}
    - {{ $value->qty }} + {{ cleanIntegerFromString($value->qty) }}
    - {{$shop_item['points_total']}} + {{ number_format($shop_item['points_total'], 0) }} {{ formatNumber($shop_item['user_price_net']) }} € - {{$shop_item['qty']}} + {{ number_format($shop_item['qty'], 0) }} {{ formatNumber($shop_item['user_price_total_net']) }} € @@ -80,7 +80,7 @@ - {{ $shopping_order->shopping_collect_order->qty_total }} + {{ cleanIntegerFromString($shopping_order->shopping_collect_order->qty_total) }} diff --git a/resources/views/pdf/invoice-detail.blade.php b/resources/views/pdf/invoice-detail.blade.php index e6d61b8..8bd873e 100644 --- a/resources/views/pdf/invoice-detail.blade.php +++ b/resources/views/pdf/invoice-detail.blade.php @@ -39,7 +39,7 @@ {{ $shopping_order_item->getFormattedPrice() }} € - {{ $shopping_order_item->qty }} + {{ cleanIntegerFromString($shopping_order_item->qty) }} {{ $shopping_order_item->getFormattedTaxRate() }}% @@ -52,7 +52,7 @@ {{ $shopping_order_item->getFormattedPriceVkNet() }} € - {{ $shopping_order_item->qty }} + {{ cleanIntegerFromString($shopping_order_item->qty) }} {{ $shopping_order_item->points }} diff --git a/resources/views/pdf/invoice-homeparty-detail.blade.php b/resources/views/pdf/invoice-homeparty-detail.blade.php index 2b37d0a..649213b 100644 --- a/resources/views/pdf/invoice-homeparty-detail.blade.php +++ b/resources/views/pdf/invoice-homeparty-detail.blade.php @@ -9,7 +9,7 @@ {{ maxStrLength($value->product->getLang('name') , 35) }} - {{ $value->qty }} + {{ cleanIntegerFromString($value->qty) }} {{ $value->getFormattedTotalPoints() }} diff --git a/resources/views/pdf/invoice-journal-collection.blade.php b/resources/views/pdf/invoice-journal-collection.blade.php index 37f25e2..d12741c 100644 --- a/resources/views/pdf/invoice-journal-collection.blade.php +++ b/resources/views/pdf/invoice-journal-collection.blade.php @@ -106,7 +106,7 @@ {{ $shopping_order_item->getFormattedPrice() }} € - {{ $shopping_order_item->qty }} + {{ cleanIntegerFromString($shopping_order_item->qty) }} {{ $shopping_order_item->getFormattedTotalPrice() }} € diff --git a/resources/views/user/abo/_bak_index.blade.php b/resources/views/user/abo/_bak_index.blade.php new file mode 100644 index 0000000..ebf2916 --- /dev/null +++ b/resources/views/user/abo/_bak_index.blade.php @@ -0,0 +1,130 @@ +@extends('layouts.layout-2') + +@section('content') +

    +
    + @if($view === 'ot') {{ __('navigation.customerabos') }} @endif + @if($view === 'me') {{ __('navigation.myabos') }} @endif + / {{ __('navigation.overview') }} +
    +

    + +
    +
    + + @if($user_abos->isEmpty()) +
    +
    +
    +
    +
    {{ __('abo.abo_delivery') }}
    + +
    +
    + + +
    +
    +
    + + @endif + @foreach($user_abos as $user_abo) +
    + +
    +
    +
    +
    +
    {{ __('tables.start_date') }}
    +
    {{ $user_abo->start_date }}
    +
    +
    +
    {{ __('tables.next_date') }}
    +
    {{ $user_abo->next_date }}
    +
    +
    +
    {{ __('tables.abo_delivery_day') }}
    +
    {{ \App\Services\HTMLHelper::getAboStrLang($user_abo->abo_interval) }}
    +
    +
    +
    {{ __('tables.last_date') }}
    +
    {{ $user_abo->last_date }} / {{ $user_abo->getCountOrders() }}
    +
    +
    +
    +
    +
    +
    +
    +
    {{ __('tables.status') }}
    + {!! $user_abo->getStatusFormated() !!} +
    +
    +
    {{ __('tables.active') }}
    + {!! get_active_badge($user_abo->active) !!} +
    +
    +
    {{ __('tables.amount') }}
    + {{ $user_abo->getFormattedAmount() }} € +
    +
    +
    {{ __('tables.payment') }}
    + {{ $user_abo->getPaymentType() }} +
    +
    +
    + @if($view === 'ot') +
    +
    +
    +
    +
    {{ __('First name') }}
    + @if($user_abo->shopping_user) + {{ $user_abo->shopping_user->billing_firstname }} + @endif +
    +
    +
    {{ __('Last name') }}
    + @if($user_abo->shopping_user) + {{ $user_abo->shopping_user->billing_lastname }} + @endif +
    +
    +
    {{ __('E-Mail') }}
    + @if($user_abo->shopping_user) + {{ $user_abo->shopping_user->billing_email }} + @endif +
    +
    +
    {{ __('tables.customer') }}
    + @if($user_abo->shopping_user) + + @endif + +
    +
    +
    + @endif +
    + @endforeach +
    +
    +@endsection \ No newline at end of file diff --git a/resources/views/user/abo/detail.blade.php b/resources/views/user/abo/detail.blade.php new file mode 100644 index 0000000..3276120 --- /dev/null +++ b/resources/views/user/abo/detail.blade.php @@ -0,0 +1,65 @@ +@extends('layouts.layout-2') + +@section('content') + +

    + {{ __('back') }} + +
    + @if($view === 'ot') {{ __('navigation.customerabo') }} @endif + @if($view === 'me') {{ __('navigation.myabo') }} @endif + {{ '#'.$user_abo->payone_userid }} +
    +

    + + +@if(Session::has('alert-error')) +
    +
    +
      +
    • {{ Session::get('alert-error') }}
    • +
    +
    +
    +@endif +
    + @include('admin.abo._detail') +
    + +
    + @include('admin.customer._customer_detail', ['shopping_user' => $customer_detail]) +
    + + {!! Form::open(['url' => route('user_abos_update', [$view, $user_abo->id]), 'class' => 'form-horizontal', 'id'=>'cart-order-form']) !!} + +
    + @include('admin.abo._order_abo') +
    + + @if($comp_products && Yard::instance('shopping')->getNumComp() > 0) +
    + @include('user.order.comp_product') +
    + @endif + + {{ Form::close() }} + +
    + @include('admin.abo._executions') +
    + + + {{ __('back') }} + +@endsection + +@section('scripts') + + +@endsection \ No newline at end of file diff --git a/resources/views/user/abo/index.blade.php b/resources/views/user/abo/index.blade.php new file mode 100644 index 0000000..3f9a064 --- /dev/null +++ b/resources/views/user/abo/index.blade.php @@ -0,0 +1,130 @@ +@extends('layouts.layout-2') + +@section('content') +

    +
    + @if($view === 'ot') {{ __('navigation.customerabos') }} @endif + @if($view === 'me') {{ __('navigation.myabos') }} @endif + / {{ __('navigation.overview') }} +
    +

    + +
    +
    + + @if(!$user_abos || $user_abos->isEmpty()) +
    +
    +
    +
    +
    {{ __('abo.abo_delivery') }}
    + +
    +
    + + +
    +
    +
    + @endif + + @foreach($user_abos as $user_abo) +
    + +
    +
    +
    +
    +
    {{ __('tables.start_date') }}
    +
    {{ $user_abo->start_date }}
    +
    +
    +
    {{ __('tables.next_date') }}
    +
    {{ $user_abo->next_date }}
    +
    +
    +
    {{ __('tables.abo_delivery_day') }}
    +
    {{ \App\Services\HTMLHelper::getAboStrLang($user_abo->abo_interval) }}
    +
    +
    +
    {{ __('tables.last_date') }}
    +
    {{ $user_abo->last_date }}
    +
    +
    +
    +
    +
    +
    +
    +
    {{ __('tables.status') }} / {{ __('tables.active') }}
    + {!! $user_abo->getStatusFormated() !!}  {!! get_active_badge($user_abo->active) !!} +
    +
    +
    {{ __('tables.abo_delivery') }}
    + {{ $user_abo->getCountOrders() }} +
    +
    +
    {{ __('tables.amount') }}
    + {{ $user_abo->getFormattedAmount() }} € +
    +
    +
    {{ __('tables.payment') }}
    + {{ $user_abo->getPaymentType() }} +
    +
    +
    + @if($view === 'ot') +
    +
    +
    +
    +
    {{ __('First name') }}
    + @if($user_abo->shopping_user) + {{ $user_abo->shopping_user->billing_firstname }} + @endif +
    +
    +
    {{ __('Last name') }}
    + @if($user_abo->shopping_user) + {{ $user_abo->shopping_user->billing_lastname }} + @endif +
    +
    +
    {{ __('E-Mail') }}
    + @if($user_abo->shopping_user) + {{ $user_abo->shopping_user->billing_email }} + @endif +
    +
    +
    {{ __('tables.customer') }}
    + @if($user_abo->shopping_user) + + @endif + +
    +
    +
    + @endif +
    + @endforeach +
    +
    +@endsection \ No newline at end of file diff --git a/resources/views/user/abo/modal_abo_show_products.blade.php b/resources/views/user/abo/modal_abo_show_products.blade.php new file mode 100644 index 0000000..86a2ca1 --- /dev/null +++ b/resources/views/user/abo/modal_abo_show_products.blade.php @@ -0,0 +1,60 @@ + + \ No newline at end of file diff --git a/resources/views/user/abo/vat_info.blade.php b/resources/views/user/abo/vat_info.blade.php new file mode 100644 index 0000000..ab36d80 --- /dev/null +++ b/resources/views/user/abo/vat_info.blade.php @@ -0,0 +1,28 @@ + + +
    +
    +
    {{ __('payment.ordering_country') }}
    + {{ App\Services\UserService::getOrderInfo('billing_state') }} +
    +
    +
    {{ __('payment.country_of_delivery') }}
    + {{ App\Services\UserService::getOrderInfo('shipping_state') }} +
    +
    +
    {{ __('payment.VAT') }}
    + {{ App\Services\UserService::getOrderInfo('tax_free') }} +
    +
    +
    {{ __('payment.reverse_charge_procedure') }}
    + {{ App\Services\UserService::getOrderInfo('user_reverse_charge') }} +
    +
    + +
    + @if($view === 'me' || $view === 'ot-member') +

    {!! __('abo.product_prices_career_level_info', ['user_level_name'=>$user_abo->user->user_level->getLang('name'), 'user_level_margin'=>$user_abo->user->user_level->getFormattedMargin()]) !!}

    + @endif + @if($view === 'ot') +

    {!! __('abo.product_prices_career_level_cpay_info', ['user_level_name'=>$user_abo->member->user_level->getLang('name'), 'user_level_margin'=>$user_abo->member->user_level->getFormattedMargin()]) !!}

    + @endif diff --git a/resources/views/user/homeparty/modal_hp_show_products.blade.php b/resources/views/user/homeparty/modal_hp_show_products.blade.php new file mode 100644 index 0000000..7062b3b --- /dev/null +++ b/resources/views/user/homeparty/modal_hp_show_products.blade.php @@ -0,0 +1,71 @@ + + \ No newline at end of file diff --git a/resources/views/user/membership/index.blade.php b/resources/views/user/membership/index.blade.php index f465c5b..fd14d7f 100644 --- a/resources/views/user/membership/index.blade.php +++ b/resources/views/user/membership/index.blade.php @@ -20,15 +20,19 @@
    - + {{-- isRenewalAccount payment_account date - config('mivita.renewal_days') Vertragsverlängerung --}} @if($user->isRenewalAccount())
    {!! __('membership.membership_was_renewed', ['date'=>$user->nextRenewalAccount()]) !!}
    +

    {{ __('membership.info_contract_renewal', ['days'=>config('mivita.renewal_days')]) }}

    @if($userHistoryPaymentOrder && $userHistoryPaymentOrder->status > 2)
    {{__('membership.payment_has_been_made') }} {{__('membership.status') }}: {{ trans('payment.status.'.$userHistoryPaymentOrder->getStatusType())}}
    + @else +
    {{ __('membership.alert_contract_renewal') }}
    + @endif {{-- Abo Option deaktiviert @@ -51,15 +55,7 @@ @endif @endif --}} - @if($user->payment_order_id) - @if($user->payment_order_product->identifier === 'show_upgrade') -

    {{ __('membership.downgrade_membership_is_not_possible') }}

    -

    {{ __('membership.upgrade_package_and_proceed_payment') }}

    - @endif - @if($user->payment_order_product->identifier === 'show_order') -

    {{ __('membership.is_no_longer_possible_to_change_package') }}

    - @endif - @endif + @if($userHistoryPaymentOrder && $userHistoryPaymentOrder->status > 2)
    @@ -73,6 +69,16 @@ @else @include('user.membership._payment_order') @endif + + @if($user->payment_order_id) + @if($user->payment_order_product->identifier === 'show_upgrade') +

    {{ __('membership.downgrade_membership_is_not_possible') }}

    +

    {{ __('membership.upgrade_package_and_proceed_payment') }}

    + @endif + @if($user->payment_order_product->identifier === 'show_order') +

    {{ __('membership.is_no_longer_possible_to_change_package') }}

    + @endif + @endif
    @else @@ -119,6 +125,50 @@
    @endif @endif + + +
    +
    Zahlungshistorie
    +
    +

    + Die Zahlungshistorie zeigt Dir alle Zahlungen für Deine MIVITA Mitgliedschaft. +

    +
    + + + + + + + + + + + + + + @foreach($userShoppingOrders as $value) + + + + + + + + + + + @endforeach + +
    #{{__('tables.date')}}{{__('tables.amount')}}{{__('tables.payment')}}{{__('tables.status')}}{{__('tables.art')}}{{__('tables.rf_no')}}
    + + + + {{ $value->created_at->format("d.m.Y") }}{{ $value->getFormattedTotalShipping() }}€{{ $value->getLastShoppingPayment('getPaymentType') }}{!! \App\Services\Payment::getShoppingOrderBadge($value) !!}{!! App\Services\Payment::getPaymentForBadge($value) !!}{{ $value->getLastShoppingPayment('reference') }}
    +
    +
    +
    + {{-- remove ABO Options --}} {{-- Abo Option deaktiviert diff --git a/resources/views/user/order/_list_delivery_vat_info.blade.php b/resources/views/user/order/_list_delivery_vat_info.blade.php index 55abfb8..c9fc691 100644 --- a/resources/views/user/order/_list_delivery_vat_info.blade.php +++ b/resources/views/user/order/_list_delivery_vat_info.blade.php @@ -1,14 +1,14 @@
    @if($template === 'me') -

    @if($is_abo) {{ __('order.abo_delivery_to_me') }} @else {{ __('order.delivery_to_me') }} @endif

    +

    @if($is_abo) {{ __('abo.abo_delivery_to_me') }} @else {{ __('order.delivery_to_me') }} @endif

    @endif @if($template === 'ot-customer') -

    @if($is_abo) {{ __('order.abo_delivery_to_the_customer') }} @else {{ __('order.delivery_to_the_customer') }} @endif

    +

    @if($is_abo) {{ __('abo.abo_delivery_to_the_customer') }} @else {{ __('order.delivery_to_the_customer') }} @endif

    {{ __('order.cpay_text') }}.

    @endif @if($template === 'ot-member') -

    @if($is_abo) {{ __('order.abo_delivery_to_the_customer') }} @else {{ __('order.delivery_to_the_customer') }} @endif

    +

    @if($is_abo) {{ __('abo.abo_delivery_to_the_customer') }} @else {{ __('order.delivery_to_the_customer') }} @endif

    {{ __('order.ipay_text') }}.

    @endif @@ -46,6 +46,12 @@ @endif @else

    {{ __('order.no_career_level_info') }}

    +@endif +@if($is_abo) +
    +
    {!! __('abo.abo_type_info', ['base'=>get_abo_type_badge('base'), 'upgrade'=>get_abo_type_badge('upgrade')]) !!}
    +

    @endif
    -
    \ No newline at end of file +
    + diff --git a/resources/views/user/order/comp_product.blade.php b/resources/views/user/order/comp_product.blade.php index 18fbdc9..2416c77 100644 --- a/resources/views/user/order/comp_product.blade.php +++ b/resources/views/user/order/comp_product.blade.php @@ -4,36 +4,35 @@ @for($i = 1; $i <= Yard::instance('shopping')->getNumComp(); $i++) @if(Yard::instance('shopping')->getNumComp() > 1) -

    {{$i}}. {{ __('order.shipping_compensation_product') }}

    +
    {{$i}}. {{ __('order.shipping_compensation_product') }}
    @else -

    {{ __('order.shipping_compensation_product') }}

    +
    {{ __('order.shipping_compensation_product') }}
    @endif
    @php($counter = 1) @php($checked_id = Yard::instance('shopping')->getCompProductBy($i)) - @foreach($comp_products as $comp_product) - -
    -
    - @if(count($comp_product->images)) - - @endif + @foreach($comp_products as $comp_product) +
    +
    + @if(count($comp_product->images)) + + @endif +
    +
    + +
    {{ $comp_product->getLang('name') }}
    +
    {{ __('order.art_no') }}: {{ $comp_product->number }}
    +
    -
    - -
    {{ $comp_product->getLang('name') }}
    -
    {{ __('order.art_no') }}: {{ $comp_product->number }}
    -
    -
    - @php($counter++) - @endforeach + @php($counter++) + @endforeach
    @endfor
    diff --git a/resources/views/user/order/custom_payment.blade.php b/resources/views/user/order/custom_payment.blade.php index d72ec0e..6817b4e 100644 --- a/resources/views/user/order/custom_payment.blade.php +++ b/resources/views/user/order/custom_payment.blade.php @@ -3,8 +3,12 @@ @section('content')
    + @if($is_abo) +

    {{ __('order.order_abo_was_placed_successfully') }}

    + @else

    {{ __('order.order_was_placed_successfully') }}

    - + @endif +
    {{ __('order.payment_link_for_your_customer') }}
    @@ -64,6 +68,10 @@
    {{ __('Phone') }}
    {{ $shopping_user->billing_phone }}
    +
    +
    {{ __('E-Mail') }}
    + @if($shopping_user->faker_mail) "-" @else {{ $shopping_user->billing_email }} @endif +

    @@ -133,7 +141,7 @@ @if(isset($yard_shopping_items))
    - +
    @@ -155,7 +163,12 @@ @endif
    - {{ $item->name }} +
    {{ $item->name }} + {!! get_abo_type_badge($item->abo_type) !!}
    +
    +
    {{ __('order.content') }}: {{ $item->contents }}
    +
    {{ __('order.art_no') }}: {{ $item->number }}
    +
    @@ -179,11 +192,6 @@ @endforeach - - - + @@ -69,6 +70,7 @@ + diff --git a/resources/views/user/user_form.blade.php b/resources/views/user/user_form.blade.php index 277e23a..515f193 100644 --- a/resources/views/user/user_form.blade.php +++ b/resources/views/user/user_form.blade.php @@ -312,16 +312,16 @@
    - - {{ Form::text('bank_owner', $user->account->bank_owner, array('placeholder'=>__('account.firstname_lastname'), 'class'=>'form-control', 'id'=>'bank_owner')) }} + + {{ Form::text('bank_owner', $user->account->bank_owner, array('placeholder'=>__('account.firstname_lastname'), 'class'=>'form-control', 'id'=>'bank_owner', 'required'=>true)) }}
    - - {{ Form::text('bank_iban', $user->account->bank_iban, array('placeholder'=>__('account.IBAN'), 'class'=>'form-control', 'id'=>'bank_iban')) }} + + {{ Form::text('bank_iban', $user->account->bank_iban, array('placeholder'=>__('account.IBAN'), 'class'=>'form-control', 'id'=>'bank_iban', 'required'=>true)) }}
    - - {{ Form::text('bank_bic', $user->account->bank_bic, array('placeholder'=>__('account.BIC'), 'class'=>'form-control', 'id'=>'bank_bic')) }} + + {{ Form::text('bank_bic', $user->account->bank_bic, array('placeholder'=>__('account.BIC'), 'class'=>'form-control', 'id'=>'bank_bic', 'required'=>true)) }}
    diff --git a/resources/views/vendor/translation/languages/index.blade.php b/resources/views/vendor/translation/languages/index.blade.php index 57f763c..e958934 100644 --- a/resources/views/vendor/translation/languages/index.blade.php +++ b/resources/views/vendor/translation/languages/index.blade.php @@ -24,7 +24,7 @@
    {{ __('tables.product') }}
    -
    -
    {{__('order.subtotal')}} diff --git a/resources/views/user/order/delivery.blade.php b/resources/views/user/order/delivery.blade.php index 8e54c8b..3ca7138 100644 --- a/resources/views/user/order/delivery.blade.php +++ b/resources/views/user/order/delivery.blade.php @@ -44,53 +44,61 @@ ({{ __('order.cpay') }}) + @if(Auth::user()->isVIP())
    -

    {{ __('order.abo_delivery') }}

    +
    +
    VIP only
    +
    - +

    {{ __('abo.abo_delivery') }} + +

    +
    + @if(\App\Services\AboHelper::userHasAbo(Auth::user())) +

    {{ __('navigation.myabo') }} {{ __('edit') }}

    + @else + + @endif - - -
    +
    +
    + +
    +
    +
    +
      + {!! __('abo.pros_list') !!} +
    +
    +
    +
    + @endif
    - @if(Session::has('custom-error')) -
    - - {{ Session::get('custom-error') }} -
    - @endif - + + {!! Form::close() !!} - - +@endsection \ No newline at end of file diff --git a/resources/views/user/order/shipping_ot.blade.php b/resources/views/user/order/shipping_ot.blade.php index b217dff..02f6db9 100644 --- a/resources/views/user/order/shipping_ot.blade.php +++ b/resources/views/user/order/shipping_ot.blade.php @@ -1,5 +1,5 @@ - @if($for == 'ot-customer') + @if($for == 'ot-customer' || $for == 'abo-ot-customer') {{ Form::hidden('billing_company', $shopping_user->billing_company) }} {{ Form::hidden('billing_salutation', $shopping_user->billing_salutation) }} {{ Form::hidden('billing_firstname', $shopping_user->billing_firstname) }} diff --git a/resources/views/user/order/yard_view_form.blade.php b/resources/views/user/order/yard_view_form.blade.php index 324e7ca..44d5073 100644 --- a/resources/views/user/order/yard_view_form.blade.php +++ b/resources/views/user/order/yard_view_form.blade.php @@ -125,7 +125,7 @@
    -
    {{ $row->name }}
    +
    {{ $row->name }} @if(isset($is_abo) && $is_abo) {!! get_abo_type_badge_by_product($product) !!} @endif
    {{ __('order.content') }}: {{ $product->contents }}
    {{ __('order.art_no') }}: {{ $product->number }}
    @@ -258,14 +258,14 @@ @if(isset($is_abo) && $is_abo)
    -

    {{ __('order.abo_settings') }}

    +

    {{ __('abo.abo_settings') }}

    - +
    @@ -273,20 +273,29 @@
    - {!! __('order.abo_order_info') !!} + {!! __('abo.abo_order_info') !!}
    + +
    -
    - +
    - - @endif - @if((isset($data['for']) && $data['for'] === 'ot-customer') || (isset($for) && $for === 'ot-customer')) + @php($is_disabled = false) + @if(isset($is_abo) && $is_abo && !\App\Services\AboHelper::aboHasBaseProduct(Yard::instance('shopping')->getContentByOrder())) + @php($is_disabled = true)
    - +
    + {!! __('abo.abo_type_info_base', ['base'=>get_abo_type_badge('base')]) !!} +
    +
    +
    + @endif + @if((isset($data['for']) && $data['for'] === 'ot-customer') || (isset($for) && $for === 'abo-ot-customer')) +
    +


    @@ -294,12 +303,13 @@
    @else
    - +


    {!! __('payment.checkout_ssl_server') !!}
    @endif + @endif @endif diff --git a/resources/views/user/shop/sales/api_order_list_total.blade.php b/resources/views/user/shop/sales/api_order_list_total.blade.php index 85a6f1c..abf57e4 100644 --- a/resources/views/user/shop/sales/api_order_list_total.blade.php +++ b/resources/views/user/shop/sales/api_order_list_total.blade.php @@ -22,13 +22,13 @@
    - {{$shop_item->points_total}} + {{ number_format($shop_item->points_total, 0) }} {{ formatNumber($shop_item->user_price_net) }} € - {{$shop_item->qty}} + {{ number_format($shop_item->qty, 0) }} diff --git a/resources/views/user/team/export.blade.php b/resources/views/user/team/export.blade.php index 4dfde51..1bf119e 100644 --- a/resources/views/user/team/export.blade.php +++ b/resources/views/user/team/export.blade.php @@ -47,6 +47,7 @@ {{__('tables.phone') }} {{__('tables.mobil') }} {{__('tables.birthday') }}{{__('tables.partner_since') }} {{__('tables.account') }} {{__('tables.account_to') }} {{__('tables.sponsor')}}{{ $child->phone }} {{ $child->mobil }} {{ $child->birthday }}{{ $child->partner_since }} {!! ($child->active_account == 1 ? __('yes') : __('no')) !!} {{ $child->payment_account_date }} {{ $child->sponsor_name }} - + {{ __('translation::translation.translations') }} {{ __('edit') }} {{ $name }} diff --git a/resources/views/web/layouts/application.blade.php b/resources/views/web/layouts/application.blade.php index 21f2110..cd8add1 100644 --- a/resources/views/web/layouts/application.blade.php +++ b/resources/views/web/layouts/application.blade.php @@ -11,6 +11,7 @@ + diff --git a/resources/views/web/templates/_bcategories.blade.php b/resources/views/web/templates/_bcategories.blade.php index 64dd20b..b6e9d26 100644 --- a/resources/views/web/templates/_bcategories.blade.php +++ b/resources/views/web/templates/_bcategories.blade.php @@ -22,11 +22,11 @@ {{ __('webcontent.compatibility_with_family_private_life') }} -
  • + {{--
  • {{ __('webcontent.start_up') }}
  • - +--}} diff --git a/resources/views/web/templates/existenzgruendung.blade.php b/resources/views/web/templates/_existenzgruendung.blade.php similarity index 100% rename from resources/views/web/templates/existenzgruendung.blade.php rename to resources/views/web/templates/_existenzgruendung.blade.php diff --git a/resources/views/web/templates/checkout-is-final.blade.php b/resources/views/web/templates/checkout-is-final.blade.php new file mode 100644 index 0000000..cd05132 --- /dev/null +++ b/resources/views/web/templates/checkout-is-final.blade.php @@ -0,0 +1,111 @@ +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') + +@section('content') + + + + + + + + +
    +
    + + +
    +
    +

    {{ __('payment.thank_you_very_much') }}

    + +

    {{ __('payment.link_was_paid') }}

    +
    + + +

    + {{ __('payment.your_mivita_team') }} +

    +
    +
    + + +
    +
    + +@endsection \ No newline at end of file diff --git a/resources/views/web/templates/checkout.blade.php b/resources/views/web/templates/checkout.blade.php index fe42f83..3af9fa4 100644 --- a/resources/views/web/templates/checkout.blade.php +++ b/resources/views/web/templates/checkout.blade.php @@ -217,6 +217,13 @@ @endif + @if($instance_status) +
    +
    + {!! \App\Services\OrderPaymentService::getStatusAlert($instance_status) !!} +
    +
    + @endif
    {{-- LEFT --}} @@ -252,7 +259,7 @@ @endif
    -
    {{ $row->name }}
    +
    {{ $row->name }} @if(isset($is_abo) && $is_abo) {!! get_abo_type_badge_by_product($product) !!} @endif
    {{ __('order.content') }}: {{ $product->contents }}
    {{ __('order.art_no') }}: {{ $product->number }}
    {{ __('weborder.delivery_time_1_3') }}
    @@ -359,7 +366,6 @@
    {!! Form::open(['url' => route('checkout.checkout_card_final'), 'class' => 'row clearfix', 'id'=>'checkout_card_final']) !!} - {!! Form::hidden('selected_country', '') !!} {!! Form::hidden('is_for', $shopping_user->is_for) !!} {!! Form::hidden('is_from', $shopping_user->is_from) !!} @@ -406,7 +412,7 @@
    - {!! HTMLHelper::getSalutation(($shopping_user->billing_salutation ? $shopping_user->billing_salutation : old('billing_salutation'))) !!} @if ($errors->has('billing_salutation')) @@ -508,7 +514,12 @@
    - {!! Form::email('billing_email', $shopping_user->billing_email, ['class' => 'form-control '.($errors->has('billing_email') ? 'error' : ''), 'id'=>'billing_email']) !!} + @if($is_for === 'ot-customer' || $is_for === 'abo-ot-customer') + {!! Form::email('billing_email', $shopping_user->billing_email, ['class' => 'form-control '.($errors->has('billing_email') ? 'error' : ''), 'id'=>'billing_email', 'readonly' => 'readonly']) !!} + {{ __('order.email_can_not_be_changed') }}. + @else + {!! Form::email('billing_email', $shopping_user->billing_email, ['class' => 'form-control '.($errors->has('billing_email') ? 'error' : ''), 'id'=>'billing_email']) !!} + @endif @if ($errors->has('billing_email')) @endif @@ -679,7 +690,7 @@ - {!! HTMLHelper::getSalutation(($shopping_user->shipping_salutation ? $shopping_user->shipping_salutation : old('shipping_salutation'))) !!} @if ($errors->has('shipping_salutation')) @@ -811,7 +822,7 @@ @endif {{-- PAYMENT METHOD --}}
    -

    @if(!$is_abo) {{ __('payment.payment_method') }} @else {{ __('order.payment_for_abo') }} @endif

    +

    @if(!$is_abo) {{ __('payment.payment_method') }} @else {{ __('abo.payment_for_abo') }} @endif


    @@ -897,20 +908,20 @@ {{-- ABO INFOS --}} @if($is_abo)
    -

    {{ __('order.abo_delivery') }}

    +

    {{ __('abo.abo_delivery') }}


    -

    {{ __('order.abo_order_info') }}

    +

    {{ __('abo.abo_order_info') }}

    {{ now()->format('d.m.Y') }}
    - {{ __('order.abo_start_date') }}: + {{ __('abo.abo_start_date') }}:
    -
    {{ HTMLHelper::getAboWeeksLang($abo_interval) }}
    +
    {{ HTMLHelper::getAboStrLang($abo_interval) }}
    - {{ __('order.abo_delivery_intervall') }}: + {{ __('abo.abo_delivery_intervall') }}:
    @endif @@ -980,11 +991,10 @@
    - {{-- --}} -
    @@ -1000,36 +1010,41 @@
    -
    - - {!! Form::text('cc_cardpan', '', ['class' => 'form-control', 'id'=>'cc_cardpan', 'placeholder'=>__('payment.credit_card_number')]) !!} -
    -
    - -
    - @php( $months = range(1, 12)) @foreach($months as $month) @php( $month = sprintf('%02d', $month) ) @endforeach -
    -
    - + @php( $years = range(date("Y"), date('Y', strtotime('+10 years'))) ) @foreach($years as $year) @endforeach -
    -
    - +
    + {!! Form::text('cc_cardcvc2', '', ['class' => 'form-control', 'id'=>'cc_cardcvc2', 'placeholder'=>'CVC*']) !!}
    + + + + +
    diff --git a/resources/views/web/user/layouts/application.blade.php b/resources/views/web/user/layouts/application.blade.php index 79f04fd..7b4f970 100644 --- a/resources/views/web/user/layouts/application.blade.php +++ b/resources/views/web/user/layouts/application.blade.php @@ -11,6 +11,7 @@ + diff --git a/routes/web.php b/routes/web.php index cf3d89d..5dab527 100755 --- a/routes/web.php +++ b/routes/web.php @@ -253,6 +253,11 @@ Route::domain(config('app.pre_url_crm').config('app.domain').config('app.tld_car Route::post('/user/team/load', 'User\TeamController@load')->name('user_team_load'); + Route::get('/user/abos/{view}', 'User\AboController@index')->name('user_abos'); + Route::get('/user/abos/detail/{view}/{id}', 'User\AboController@detail')->name('user_abos_detail'); + Route::post('/user/abos/update/{view}/{id}', 'User\AboController@update')->name('user_abos_update'); + Route::get('/user/abo/datatable/{id}', 'User\AboController@datatable')->name('user_abo_datatable'); + //user customers Route::get('/user/customers', 'User\CustomerController@index')->name('user_customers'); @@ -262,7 +267,7 @@ Route::domain(config('app.pre_url_crm').config('app.domain').config('app.tld_car Route::post('/user/customer/edit/{id}', 'User\CustomerController@store')->name('user_customer_edit'); Route::get('/user/customer/datatable', 'User\CustomerController@getCustomers')->name('user_customer_datatable'); - + //user order & do order Route::get('/user/orders', 'User\OrderController@index')->name('user_orders'); Route::get('/user/orders/datatable', 'User\OrderController@ordersDatatable')->name('user_orders_datatable'); @@ -281,6 +286,10 @@ Route::domain(config('app.pre_url_crm').config('app.domain').config('app.tld_car Route::get('/user/order/my/custom/payment/{identifier}', 'User\OrderController@customPayment')->name('user_order_my_custom_payment'); + Route::get('/user/order/payment/links', 'User\OrderPaymentController@index')->name('user_order_payment_links'); + Route::get('/user/orders/payment/datatable', 'User\OrderPaymentController@datatable')->name('user_order_payment_links_datatable'); + Route::get('/user/order/payment/detail/{identifier}', 'User\OrderPaymentController@detail')->name('user_order_payment_links_detail'); + Route::get('/user/order/payment/delete/{identifier}', 'User\OrderPaymentController@delete')->name('user_order_payment_links_delete'); //user homeparty Route::get('/user/homepartys', 'User\HomepartyController@index')->name('user_homepartys'); @@ -410,6 +419,13 @@ Route::domain(config('app.pre_url_crm').config('app.domain').config('app.tld_car Route::post('/admin/sales/store', 'SalesController@store')->name('admin_sales_store'); Route::post('/admin/sales/invoice', 'SalesController@invoice')->name('admin_sales_invoice'); + + Route::get('/admin/abos', 'Admin\AboController@index')->name('admin_abos'); + Route::get('/admin/abos/detail/{id}', 'Admin\AboController@detail')->name('admin_abos_detail'); + Route::post('/admin/abos/update/{id}', 'Admin\AboController@update')->name('admin_abos_update'); + Route::get('/admin/abos/datatable', 'Admin\AboController@datatable')->name('admin_abos_datatable'); + + //payments invoice // Rechnungen Route::get('/admin/payments/invoice', 'PaymentInvoiceController@index')->name('admin_payments_invoice'); Route::post('/admin/payments/invoice', 'PaymentInvoiceController@index')->name('admin_payments_invoice');