diff --git a/app/Datatables/Admin/Shop/OrdersDataTable.php b/app/Datatables/Admin/Shop/OrdersDataTable.php index 3f28f51b..091c50b0 100644 --- a/app/Datatables/Admin/Shop/OrdersDataTable.php +++ b/app/Datatables/Admin/Shop/OrdersDataTable.php @@ -32,7 +32,7 @@ class OrdersDataTable extends DataTable return Orders::getStatus($order->status); }) ->editColumn('created_at', function (Order $order) { - return $order->created_at->toDateTimeString(); + return $order->created_at->format('d/m/Y H:i:s'); }) ->editColumn('customer.last_name', function (Order $order) { return $order->customer->last_name.' '.$order->customer->first_name; diff --git a/app/Http/Controllers/Shop/OrderController.php b/app/Http/Controllers/Shop/OrderController.php index f73aa2bc..fa71eb13 100644 --- a/app/Http/Controllers/Shop/OrderController.php +++ b/app/Http/Controllers/Shop/OrderController.php @@ -65,12 +65,13 @@ class OrderController extends Controller $order = Orders::saveOrder($data); if ($order) { if ($data['payment_type'] == '1') { - return Paybox::makeAuthorizationRequest($data['basket']['total_shipped']); - // return redirect()->route('Shop.Payments.online'); + return Paybox::makeAuthorizationRequest($order); } else { return redirect()->route('Shop.Orders.confirmed'); } - OrderMails::sendOrderConfirmed($order->id); + if ($ret) { + OrderMails::sendOrderConfirmed($order->id); + } } else { return view('Shop.Orders.order'); } diff --git a/app/Http/Controllers/Shop/OrderPaymentController.php b/app/Http/Controllers/Shop/OrderPaymentController.php deleted file mode 100644 index ed93e16a..00000000 --- a/app/Http/Controllers/Shop/OrderPaymentController.php +++ /dev/null @@ -1,9 +0,0 @@ -all()); + exit; return view('paybox.refused'); } diff --git a/app/Models/Shop/Article.php b/app/Models/Shop/Article.php index 06b6f1db..89e36743 100644 --- a/app/Models/Shop/Article.php +++ b/app/Models/Shop/Article.php @@ -57,17 +57,12 @@ class Article extends Model implements HasMedia return $this->belongsTo(ArticleNature::class); } - public function invoiceItems(): HasMany - { - return $this->hasMany(InvoiceItem::class); - } - public function offers(): HasMany { return $this->hasMany(Offer::class); } - public function price_lists(): HasManyDeep + public function price_lists() { return $this->hasManyDeep( PriceList::class, @@ -77,7 +72,7 @@ class Article extends Model implements HasMedia ); } - public function prices(): HasManyDeep + public function prices() { return $this->hasManyDeep( PriceListValue::class, @@ -166,6 +161,16 @@ class Article extends Model implements HasMedia return $query->byProduct(Merchandise::class); } + public function scopeVisible($query) + { + return $query->where($this->table.'.visible', 1); + } + + public function scopeHomepage($query) + { + return $query->where($this->table.'.homepage', 1); + } + public function scopeByProduct($query, $model) { return $model ? $query->where($this->table.'.product_type', $model) : $query; @@ -179,23 +184,14 @@ class Article extends Model implements HasMedia public function scopeByTag($query, $tagId) { return $tagId ? $query->whereHas('tags', function ($query) use ($tagId) { - $query->where('id', $tagId); + $query->byId($tagId); }) : $query; } public function scopeByTags($query, $tags) { return $tags ? $query->whereHas('tags', function ($query) use ($tags) { - $query->whereIn('id', $tags); - }) : $query; - } - - public function scopeByTagsSelected($query, $tags) - { - return $tags ? $query->whereHas('tags', function ($query) use ($tags) { - foreach ($tags as $tag) { - $query->where('id', $tag); - } + $query->byIds($tags); }) : $query; } @@ -210,14 +206,4 @@ class Article extends Model implements HasMedia $query->active()->byStockAvailable()->bySaleChannel($saleChannelId); }); } - - public function scopeVisible($query) - { - return $query->where($this->table.'.visible', 1); - } - - public function scopeHomepage($query) - { - return $query->where($this->table.'.homepage', 1); - } } diff --git a/app/Models/Shop/Invoice.php b/app/Models/Shop/Invoice.php index 868dd838..802fac6f 100644 --- a/app/Models/Shop/Invoice.php +++ b/app/Models/Shop/Invoice.php @@ -44,6 +44,11 @@ class Invoice extends Model return $query->where('uuid', $uuid); } + public function scopeById($query, $id) + { + return $query->where('id', $id); + } + public function scopeByPeriod($query, $start, $end) { return $query->whereBetween('created_at', [$start, $end]); diff --git a/app/Models/Shop/InvoicePayment.php b/app/Models/Shop/InvoicePayment.php index 56528391..c38f7efc 100644 --- a/app/Models/Shop/InvoicePayment.php +++ b/app/Models/Shop/InvoicePayment.php @@ -3,9 +3,13 @@ namespace App\Models\Shop; use Illuminate\Database\Eloquent\Model; +use Venturecraft\Revisionable\RevisionableTrait; +use Wildside\Userstamps\Userstamps; class InvoicePayment extends Model { + use RevisionableTrait, Userstamps; + protected $guarded = ['id']; protected $table = 'shop_invoice_payments'; @@ -15,8 +19,30 @@ class InvoicePayment extends Model return $this->belongsTo(Invoice::class); } - public function scopeByInvoice($query, $invoice_id) + public function order() { - return $query->where('invoice_id', $invoice_id); + return $this->belongsToThrough(Order::class, Invoice::class); + } + + public function scopeByInvoice($query, $invoiceId) + { + return $query->where('invoice_id', $invoiceId); + } + + public function scopeValidated($query) + { + return $query->where('validated', 1); + } + + public function scopeByOrder($query, $orderId) + { + return $query->whereHas('order', function($query) use ($orderId) { + return $query->byOrder($orderId); + }); + } + + public function scopeByPaymentType($query, $paymentType) + { + return $query->where('payment_type', $paymentType); } } diff --git a/app/Models/Shop/Order.php b/app/Models/Shop/Order.php index 4846aab2..97ff4183 100644 --- a/app/Models/Shop/Order.php +++ b/app/Models/Shop/Order.php @@ -92,4 +92,11 @@ class Order extends Model { return $query->whereBetween($field, [$start, $end]); } + + public function scopeByInvoice($query, $invoiceId) + { + return $query->whereHas('invoice', function ($query) use ($invoiceId) { + $query->byId($invoiceId); + }); + } } diff --git a/app/Models/Shop/Tag.php b/app/Models/Shop/Tag.php index f57d5a39..cb8d647b 100644 --- a/app/Models/Shop/Tag.php +++ b/app/Models/Shop/Tag.php @@ -21,13 +21,6 @@ class Tag extends parentTag public $translatable = []; - /* - public function taggable() - { - return $this->hasMany('App\Models\Shop\Taggable'); - } - */ - // TODO public function offers() { @@ -80,4 +73,14 @@ class Tag extends parentTag $query->byCategoryParent($category_id); }]); } + + public function scopeById($query, $id) + { + return $query->where($this->table.'.id', $id); + } + + public function scopeByIds($query, $ids) + { + return $query->whereIn($this->table.'.id', $ids); + } } diff --git a/app/Repositories/Shop/Articles.php b/app/Repositories/Shop/Articles.php index 3b015de0..da0c1637 100644 --- a/app/Repositories/Shop/Articles.php +++ b/app/Repositories/Shop/Articles.php @@ -222,7 +222,8 @@ class Articles { $saleChannelId = $options['sale_channel_id'] ?? SaleChannels::getDefaultID(); $model = self::getModelByOptions($options); - $data = $model->withAvailableOffers($saleChannelId)->with([ + + return $model->withAvailableOffers($saleChannelId)->with([ 'image', 'product', 'article_nature', @@ -238,14 +239,6 @@ class Articles 'offers.tariff.price_lists.price_list_values', 'offers.variation.package', ])->get(); - - return $data; - } - - public static function getArticleNaturesOptionsWithOffers($options = false) - { - $ids = self::getArticleNaturesIdsWithOffers($options); - } public static function getArticleNaturesWithOffers($options = false) @@ -294,7 +287,7 @@ class Articles $model = ($options['homepage'] ?? false) ? Article::homepage()->visible() : Article::visible(); $model = $category_id ? $model->byCategoryParent($category_id) : $model; - $model = $tags ? $model->byTagsSelected($tags) : $model; + $model = $tags ? $model->byTags($tags) : $model; $model = $search ? $model->search($search) : $model; $model = $article_nature_id ? $model->byArticleNature($article_nature_id) : $model; $model = $article_nature_ids ? $model->byArticleNatures($article_nature_ids) : $model; @@ -305,6 +298,8 @@ class Articles case 'merchandise': $model = $model->merchandise(); break; + default: + $model = $model->botanic(); } return $model; @@ -313,9 +308,8 @@ class Articles public static function getFull($id) { $data['article'] = self::getArticleEdit($id); - self::getMeta($data); - - return $data; + + return self::getMeta($data); } public static function getArticleEdit($id) @@ -378,6 +372,7 @@ class Articles 'tags' => $product->tags->toArray(), ]; break; + default: } return $data ?? false; @@ -395,6 +390,7 @@ class Articles case 'App\Models\Shop\Merchandise': $images = Merchandises::getImages($product_id); break; + default: } return $images ?? false ? ['images' => $images] : false; @@ -538,8 +534,12 @@ class Articles case 'App\Models\Botanic\Variety': $variety = $article->product ?? false; $specie = $variety->specie ?? false; - $images = $variety ? (count($variety->images ?? []) ? $images->merge($variety->images) : $images) : $images; - $images = $specie ? (count($specie->images ?? []) ? $images->merge($specie->images) : $images) : $images; + if ($variety) { + $images = count($variety->images ?? []) ? $images->merge($variety->images) : $images; + } + if ($specie) { + $images = count($specie->images ?? []) ? $images->merge($specie->images) : $images; + } break; case 'App\Models\Botanic\Specie': $specie = $article->product ?? false; diff --git a/app/Repositories/Shop/Paybox.php b/app/Repositories/Shop/Paybox.php index b92887ad..1eb4fdc2 100644 --- a/app/Repositories/Shop/Paybox.php +++ b/app/Repositories/Shop/Paybox.php @@ -2,24 +2,27 @@ namespace App\Repositories\Shop; -use App; -use Bnb\PayboxGateway\Requests\AuthorizationWithCapture; -use Bnb\PayboxGateway\Requests\Capture; -use Bnb\PayboxGateway\Responses\Verify; +use Illuminate\Support\Facades\App; +use Illuminate\Support\Facades\Log; +use Bnb\PayboxGateway\Requests\Paybox\AuthorizationWithCapture; +use Bnb\PayboxGateway\Requests\PayboxDirect\Capture; +use Bnb\PayboxGateway\Responses\Paybox\Verify; +use Bnb\PayboxGateway\Responses\Exceptions\InvalidSignature; class Paybox { - public static function makeAuthorizationRequest($amount, $customer_email = 'test@example.com') + public static function makeAuthorizationRequest($order, $customer_email = 'test@example.com') { $authorizationRequest = App::make(AuthorizationWithCapture::class); + $invoiceId = $order->invoice->id; - return $authorizationRequest->setAmount($amount)->setCustomerEmail($customer_email) - ->setPaymentNumber(1)->send('paybox.send'); + return $authorizationRequest->setAmount($order->total_shipped)->setCustomerEmail($customer_email) + ->setPaymentNumber($invoiceId)->send('paybox.send'); } - public static function verifyPayment($invoice_id) + public static function verifyPayment($invoiceId) { - $invoice = Invoices::get($invoice_id); + $invoice = Invoices::get($invoiceId); $payboxVerify = App::make(Verify::class); try { $success = $payboxVerify->isSuccess($invoice->total_shipped); @@ -34,7 +37,7 @@ class Paybox public static function getPreviousAuthorizedRequest() { - $payment = PaymentModel::find($idOfAuthorizedPayment); + $payment = Payment::where('number', $request->input('order_number'))->firstOrFail(); $captureRequest = App::make(Capture::class); $response = $captureRequest->setAmount($payment->amount) ->setPayboxCallNumber($payment->call_number) diff --git a/composer.json b/composer.json index 0bb0b166..1055a2b3 100644 --- a/composer.json +++ b/composer.json @@ -11,122 +11,121 @@ "php": "^7.4|^8.0", "akaunting/laravel-apexcharts": "^2.0", "alexisgeneau/mailvalidate": "dev-master", - "arrilot/laravel-widgets": "^3.13", - "awobaz/compoships": "^2.1", + "arrilot/laravel-widgets": "^3.14", + "awobaz/compoships": "^2.2", "balping/laravel-hashslug": "^2.2", "barryvdh/laravel-dompdf": "^2.0", "barryvdh/laravel-snappy": "^1.0", "bnbwebexpertise/laravel-paybox-gateway": "^1.1", - "browner12/helpers": "^3.0", - "cesargb/laravel-cascade-delete": "^1.5", + "browner12/helpers": "^3.5", + "cesargb/laravel-cascade-delete": "^1.7", "coduo/php-humanizer": "^4.0", - "composer/composer": "^2.0.13", - "cornford/googlmapper": "^3.3", - "darryldecode/cart": "^4.1", + "composer/composer": "^2.6", + "cornford/googlmapper": "^3.4", + "darryldecode/cart": "^4.2", "datatables/datatables": "^1.10", "ddzobov/laravel-pivot-softdeletes": "^2.1", - "dietercoopman/smart": "^1.6", - "dompdf/dompdf": "^2.0.3", - "dyrynda/laravel-cascade-soft-deletes": "^4.1", - "eduardokum/laravel-mail-auto-embed": "^2.0", - "erjanmx/laravel-migrate-check": "^2.1", + "dietercoopman/smart": "^1.7", + "dompdf/dompdf": "^2.0.4", + "dyrynda/laravel-cascade-soft-deletes": "^4.2", + "eduardokum/laravel-mail-auto-embed": "^2.10", + "erjanmx/laravel-migrate-check": "^2.4", "fico7489/laravel-eloquent-join": "^4.1", - "fideloper/proxy": "^4.0", - "geo6/geocoder-php-addok-provider": "^1.1", + "fideloper/proxy": "^4.4", + "geo6/geocoder-php-addok-provider": "^1.4", "gzero/eloquent-tree": "^3.1", "hassankhan/config": "^3.1", "htmlmin/htmlmin": "^9.0", - "intervention/image": "^2.5", - "intervention/imagecache": "^2.4", + "intervention/image": "^2.7", + "intervention/imagecache": "^2.6", "jasonlewis/expressive-date": "^1.0", "jenssegers/date": "^4.0", "jeroen-g/blade-macro": "^1.0", "kalnoy/nestedset": "^6.0", - "kirschbaum-development/eloquent-power-joins": "^2.3", - "kmlaravel/laravel-geographical-calculator": "^2.1", - "knplabs/knp-snappy": "^1.2", - "laracasts/utilities": "^3.0", + "kirschbaum-development/eloquent-power-joins": "^2.7", + "kmlaravel/laravel-geographical-calculator": "^2.2", + "knplabs/knp-snappy": "^1.5", + "laracasts/utilities": "^3.2", "laracraft-tech/laravel-date-scopes": "^2.0", - "laravel/framework": "^9.0", - "laravel/helpers": "^1.1", - "laravel/scout": "^9.1", - "laravel/tinker": "^2.5", - "laravel/ui": "^3.0", - "laravelcollective/html": "^6.0", + "laravel/framework": "^9.52", + "laravel/helpers": "^1.7", + "laravel/scout": "^9.8", + "laravel/tinker": "^2.8", + "laravel/ui": "^3.4", + "laravelcollective/html": "^6.4", "laravolt/avatar": "^4.1", "lavary/laravel-menu": "1.8.3", - "league/climate": "^3.5", - "league/period": "^5.1", - "livewire/livewire": "^2.4", + "league/climate": "^3.8", + "league/period": "^5.3", + "livewire/livewire": "^2.12", "maatwebsite/excel": "^3.1", - "moneyphp/money": "^4.1", - "mpdf/mpdf": "^8.0", + "moneyphp/money": "^4.3", + "mpdf/mpdf": "^8.2", "mpociot/teamwork": "^7.0", "nicmart/tree": "^0.7", "nicolaslopezj/searchable": "^1.13", "orangehill/iseed": "^3.0", "php-console/php-console": "^3.1", - "proengsoft/laravel-jsvalidation": "^4.5", - "protonemedia/laravel-cross-eloquent-search": "^3.0", - "rahul900day/laravel-captcha": "^1.0", + "proengsoft/laravel-jsvalidation": "^4.8", + "protonemedia/laravel-cross-eloquent-search": "^3.2", + "rahul900day/laravel-captcha": "^1.2", "ralphjsmit/laravel-seo": "^1.4", "reedware/laravel-relation-joins": "^3.0", "respect/validation": "^2.2", - "rinvex/laravel-categories": "^6.0", - "rinvex/laravel-tags": "^6.0", - "rutorika/sortable": "^9.0", - "santigarcor/laratrust": "^7.1", - "sebastienheyd/boilerplate": "^7.5", + "rinvex/laravel-categories": "^6.1", + "rinvex/laravel-tags": "^6.1", + "rutorika/sortable": "^9.1", + "santigarcor/laratrust": "^7.2", + "sebastienheyd/boilerplate": "^7.24", "softcreatr/php-mime-detector": "^3.2", - "spatie/browsershot": "^3.57", - "spatie/eloquent-sortable": "^4.0", - "spatie/image-optimizer": "^1.4", + "spatie/browsershot": "^3.61", + "spatie/eloquent-sortable": "^4.1", + "spatie/image-optimizer": "^1.7", "spatie/laravel-activitylog": "^4.7", - "spatie/laravel-backup": "^8.1", + "spatie/laravel-backup": "^8.2", "spatie/laravel-collection-macros": "^7.12", "spatie/laravel-cookie-consent": "^3.2", "spatie/laravel-database-mail-templates": "^3.5", "spatie/laravel-mail-preview": "^6.0", - "spatie/laravel-medialibrary": "^10.7", - "spatie/laravel-stats": "^2.0", - "staudenmeir/belongs-to-through": "^2.11", - "staudenmeir/eloquent-has-many-deep": "^1.13", + "spatie/laravel-medialibrary": "^10.15", + "spatie/laravel-stats": "^2.1", + "staudenmeir/belongs-to-through": "^2.12", + "staudenmeir/eloquent-has-many-deep": "^1.17", "stillat/numeral.php": "^2.0", - "symfony/http-client": "^6.2", + "symfony/http-client": "^6.4", "tanthammar/laravel-window-size": "^2.1", - "thomasjohnkane/snooze": "^2.2", - "toin0u/geocoder-laravel": "^4.2", + "thomasjohnkane/snooze": "^2.3", + "toin0u/geocoder-laravel": "^4.6", "unicodeveloper/laravel-password": "^1.0", - "unisharp/laravel-filemanager": "^2.5", - "venturecraft/revisionable": "^1.39", - "watson/rememberable": "^6.0", - "wildside/userstamps": "^2.1", - "yadahan/laravel-authentication-log": "^1.2", + "unisharp/laravel-filemanager": "^2.6", + "venturecraft/revisionable": "^1.40", + "watson/rememberable": "^6.1", + "wildside/userstamps": "^2.3", + "yadahan/laravel-authentication-log": "^1.6", "yajra/laravel-datatables": "^9.0" }, "require-dev": { - "barryvdh/laravel-debugbar": "^3.8", + "barryvdh/laravel-debugbar": "^3.9", "bestmomo/laravel5-artisan-language": "^0.3", - "beyondcode/laravel-dump-server": "^1.7", - "enlightn/enlightn": "^2.1", - "fakerphp/faker": "^1.13", + "beyondcode/laravel-dump-server": "^1.9", + "enlightn/enlightn": "^2.7", + "fakerphp/faker": "^1.23", "fossbarrow/laravel-phpcs": "dev-main", - "kevincobain2000/laravel-erd": "^1.3", - "kitloong/laravel-migrations-generator": "^6.0", + "kevincobain2000/laravel-erd": "^1.6", + "kitloong/laravel-migrations-generator": "^6.11", "laravel/pint": "^1.13", - "mockery/mockery": "^1.4.2", - "nunomaduro/collision": "^7.0", - "nunomaduro/larastan": "^2.6", + "mockery/mockery": "^1.6", + "nunomaduro/collision": "^7.10", "nunomaduro/laravel-mojito": "^0.2.6", - "nunomaduro/phpinsights": "^2.8", + "nunomaduro/phpinsights": "^2.11", "orangehill/iseed": "^3.0", "phpmetrics/phpmetrics": "^2.8", - "phpunit/phpunit": "^9.5", - "spatie/laravel-ignition": "^1.0", - "spatie/laravel-web-tinker": "^1.7", - "squizlabs/php_codesniffer": "3.*", - "staudenmeir/dusk-updater": "^1.2", - "wnx/laravel-stats": "^2.11" + "phpunit/phpunit": "^9.6", + "spatie/laravel-ignition": "^1.6", + "spatie/laravel-web-tinker": "^1.8", + "squizlabs/php_codesniffer": "3.8", + "staudenmeir/dusk-updater": "^1.4", + "wnx/laravel-stats": "^2.12" }, "config": { "optimize-autoloader": true, diff --git a/routes/Shop/OrderPayments.php b/routes/Shop/OrderPayments.php deleted file mode 100644 index fd8c8c9d..00000000 --- a/routes/Shop/OrderPayments.php +++ /dev/null @@ -1,3 +0,0 @@ -namespace('Shop')->name('Shop.')->group(function () { include_once __DIR__.'/Offers.php'; include_once __DIR__.'/Orders.php'; include_once __DIR__.'/Orders.php'; - include_once __DIR__.'/OrderPayments.php'; include_once __DIR__.'/Searches.php'; });