Forráskód Böngészése

Merge branch 'development' into product_linking

AVMG 3 éve
szülő
commit
126eedc610

+ 32 - 5
app/Http/Controllers/Admin/PaymentController.php

@@ -27,6 +27,7 @@ use PayPalHttp\HttpException;
 
 class PaymentController extends Controller
 {
+
     /**
      * @return Application|Factory|View
      */
@@ -45,7 +46,10 @@ class PaymentController extends Controller
     public function checkOut(Request $request, PaypalProduct $paypalProduct)
     {
         return view('store.checkout')->with([
-            'product' => $paypalProduct
+            'product'      => $paypalProduct,
+            'taxvalue'     => $paypalProduct->getTaxValue(),
+            'taxpercent'   => $paypalProduct->getTaxPercent(),
+            'total'        => $paypalProduct->getTotalPrice()
         ]);
     }
 
@@ -65,8 +69,20 @@ class PaymentController extends Controller
                     "reference_id" => uniqid(),
                     "description" => $paypalProduct->description,
                     "amount"       => [
-                        "value"         => $paypalProduct->price,
-                        "currency_code" => strtoupper($paypalProduct->currency_code)
+                        "value"         => $paypalProduct->getTotalPrice(),
+                        'currency_code' => strtoupper($paypalProduct->currency_code),
+                        'breakdown' =>[
+                            'item_total' =>
+                               [
+                                    'currency_code' => strtoupper($paypalProduct->currency_code),
+                                    'value' => $paypalProduct->price,
+                                ],
+                            'tax_total' =>
+                                [
+                                    'currency_code' => strtoupper($paypalProduct->currency_code),
+                                    'value' => $paypalProduct->getTaxValue(),
+                                ]
+                        ]
                     ]
                 ]
             ],
@@ -76,6 +92,8 @@ class PaymentController extends Controller
                 'brand_name' =>  config('app.name', 'Laravel'),
                 'shipping_preference'  => 'NO_SHIPPING'
             ]
+
+        
         ];
 
 
@@ -161,6 +179,9 @@ class PaymentController extends Controller
                     'status' => $response->result->status,
                     'amount' => $paypalProduct->quantity,
                     'price' => $paypalProduct->price,
+                    'tax_value' => $paypalProduct->getTaxValue(),
+                    'tax_percent' => $paypalProduct->getTaxPercent(),
+                    'total_price' => $paypalProduct->getTotalPrice(),
                     'currency_code' => $paypalProduct->currency_code,
                     'payer' => json_encode($response->result->payer),
                 ]);
@@ -199,7 +220,7 @@ class PaymentController extends Controller
      */
     public function cancel(Request $request)
     {
-        return redirect()->route('store.index')->with('success', 'Payment was Cannceled');
+        return redirect()->route('store.index')->with('success', 'Payment was Canceled');
     }
 
 
@@ -216,7 +237,13 @@ class PaymentController extends Controller
                 return $payment->user->name;
             })
             ->editColumn('price', function (Payment $payment) {
-                return $payment->formatCurrency();
+                return $payment->formatToCurrency($payment->price);
+            })
+            ->editColumn('tax_value', function (Payment $payment) {
+                return $payment->formatToCurrency($payment->tax_value);
+            })
+            ->editColumn('total_price', function (Payment $payment) {
+                return $payment->formatToCurrency($payment->total_price);
             })
             ->editColumn('created_at', function (Payment $payment) {
                 return $payment->created_at ? $payment->created_at->diffForHumans() : '';

+ 5 - 5
app/Http/Controllers/Admin/PaypalProductController.php

@@ -62,7 +62,7 @@ class PaypalProductController extends Controller
         $disabled = !is_null($request->input('disabled'));
         PaypalProduct::create(array_merge($request->all(), ['disabled' => $disabled]));
 
-        return redirect()->route('admin.store.index')->with('success', 'store item has been created!');
+        return redirect()->route('admin.store.index')->with('success', 'Store item has been created!');
     }
 
     /**
@@ -112,7 +112,7 @@ class PaypalProductController extends Controller
         $disabled = !is_null($request->input('disabled'));
         $paypalProduct->update(array_merge($request->all(), ['disabled' => $disabled]));
 
-        return redirect()->route('admin.store.index')->with('success', 'store item has been updated!');
+        return redirect()->route('admin.store.index')->with('success', 'Store item has been updated!');
     }
 
     /**
@@ -124,7 +124,7 @@ class PaypalProductController extends Controller
     {
         $paypalProduct->update(['disabled' => !$paypalProduct->disabled]);
 
-        return redirect()->route('admin.store.index')->with('success', 'product has been updated!');
+        return redirect()->route('admin.store.index')->with('success', 'Product has been updated!');
     }
 
     /**
@@ -136,7 +136,7 @@ class PaypalProductController extends Controller
     public function destroy(PaypalProduct $paypalProduct)
     {
         $paypalProduct->delete();
-        return redirect()->back()->with('success', 'store item has been removed!');
+        return redirect()->back()->with('success', 'Store item has been removed!');
     }
 
 
@@ -173,7 +173,7 @@ class PaypalProductController extends Controller
                 return $paypalProduct->created_at ? $paypalProduct->created_at->diffForHumans() : '';
             })
             ->editColumn('price', function (PaypalProduct $paypalProduct) {
-                return $paypalProduct->formatCurrency();
+                return $paypalProduct->formatToCurrency($paypalProduct->price);
             })
             ->rawColumns(['actions', 'disabled'])
             ->make();

+ 4 - 4
app/Http/Controllers/Admin/ProductController.php

@@ -84,7 +84,7 @@ class ProductController extends Controller
         $product->eggs()->attach($request->input('eggs'));
         $product->nodes()->attach($request->input('nodes'));
 
-        return redirect()->route('admin.products.index')->with('success', 'product has been created!');
+        return redirect()->route('admin.products.index')->with('success', 'Product has been created!');
     }
 
     /**
@@ -152,7 +152,7 @@ class ProductController extends Controller
         $product->eggs()->attach($request->input('eggs'));
         $product->nodes()->attach($request->input('nodes'));
 
-        return redirect()->route('admin.products.index')->with('success', 'product has been updated!');
+        return redirect()->route('admin.products.index')->with('success', 'Product has been updated!');
     }
 
     /**
@@ -164,7 +164,7 @@ class ProductController extends Controller
     {
         $product->update(['disabled' => !$product->disabled]);
 
-        return redirect()->route('admin.products.index')->with('success', 'product has been updated!');
+        return redirect()->route('admin.products.index')->with('success', 'Product has been updated!');
     }
 
     /**
@@ -181,7 +181,7 @@ class ProductController extends Controller
         }
 
         $product->delete();
-        return redirect()->back()->with('success', 'product has been removed!');
+        return redirect()->back()->with('success', 'Product has been removed!');
     }
 
 

+ 2 - 2
app/Http/Controllers/Admin/ServerController.php

@@ -92,7 +92,7 @@ class ServerController extends Controller
     {
         try {
             $server->delete();
-            return redirect()->route('admin.servers.index')->with('success', 'server removed');
+            return redirect()->route('admin.servers.index')->with('success', 'Server removed');
         } catch (Exception $e) {
             return redirect()->route('admin.servers.index')->with('error', 'An exception has occurred while trying to remove a resource "' . $e->getMessage() . '"');
         }
@@ -109,7 +109,7 @@ class ServerController extends Controller
             return redirect()->back()->with('error', $exception->getMessage());
         }
 
-        return redirect()->back()->with('success', 'server has been updated!');
+        return redirect()->back()->with('success', 'Server has been updated!');
     }
 
     /**

+ 1 - 1
app/Http/Controllers/ProductController.php

@@ -21,7 +21,7 @@ class ProductController extends Controller
      */
     public function getNodesBasedOnEgg(Request $request, Egg $egg)
     {
-        if (is_null($egg->id)) return response()->json('egg id is required', '400');
+        if (is_null($egg->id)) return response()->json('Egg ID is required', '400');
 
         #get products that include this egg
         $products = Product::query()->with('nodes')->whereHas('eggs', function (Builder $builder) use ($egg) {

+ 1 - 1
app/Http/Controllers/ProfileController.php

@@ -86,6 +86,6 @@ class ProfileController extends Controller
             'email' => $request->input('email'),
         ]);
 
-        return redirect()->route('profile.index')->with('success' , 'profile updated');
+        return redirect()->route('profile.index')->with('success' , 'Profile updated');
     }
 }

+ 3 - 3
app/Http/Controllers/ServerController.php

@@ -138,7 +138,7 @@ class ServerController extends Controller
             }
         }
 
-        return redirect()->route('servers.index')->with('success', 'server created');
+        return redirect()->route('servers.index')->with('success', 'Server created');
     }
 
     /**
@@ -151,7 +151,7 @@ class ServerController extends Controller
         $server->delete();
 
         Auth::user()->notify(new ServerCreationError($server));
-        return redirect()->route('servers.index')->with('error', 'No allocations satisfying the requirements for automatic deployment were found.');
+        return redirect()->route('servers.index')->with('error', 'No allocations satisfying the requirements for automatic deployment on this node were found.');
     }
 
     /**
@@ -172,7 +172,7 @@ class ServerController extends Controller
     {
         try {
             $server->delete();
-            return redirect()->route('servers.index')->with('success', 'server removed');
+            return redirect()->route('servers.index')->with('success', 'Server removed');
         } catch (Exception $e) {
             return redirect()->route('servers.index')->with('error', 'An exception has occurred while trying to remove a resource "' . $e->getMessage() . '"');
         }

+ 11 - 2
app/Models/Payment.php

@@ -29,6 +29,9 @@ class Payment extends Model
         'type',
         'amount',
         'price',
+        'tax_value',
+        'total_price',
+        'tax_percent',
         'currency_code',
     ];
 
@@ -51,9 +54,15 @@ class Payment extends Model
         return $this->belongsTo(User::class);
     }
 
-    public function formatCurrency($locale = 'en_US')
+    /**
+     * @param mixed $value
+     * @param string $locale
+     * 
+     * @return float
+     */
+    public function formatToCurrency($value,$locale = 'en_US')
     {
         $formatter = new NumberFormatter($locale, NumberFormatter::CURRENCY);
-        return $formatter->formatCurrency($this->price, $this->currency_code);
+        return $formatter->formatCurrency($value, $this->currency_code);
     }
 }

+ 37 - 3
app/Models/PaypalProduct.php

@@ -6,6 +6,7 @@ use Hidehalo\Nanoid\Client;
 use Illuminate\Database\Eloquent\Model;
 use NumberFormatter;
 use Spatie\Activitylog\Traits\LogsActivity;
+use App\Models\Configuration;
 
 class PaypalProduct extends Model
 {
@@ -40,12 +41,45 @@ class PaypalProduct extends Model
     }
 
     /**
+     * @param mixed $value
      * @param string $locale
-     * @return string
+     * 
+     * @return float
      */
-    public function formatCurrency($locale = 'en_US')
+    public function formatToCurrency($value,$locale = 'en_US')
     {
         $formatter = new NumberFormatter($locale, NumberFormatter::CURRENCY);
-        return $formatter->formatCurrency($this->price, $this->currency_code);
+        return $formatter->formatCurrency($value, $this->currency_code);
+    }
+
+    /**
+    * @description Returns the tax in % taken from the Configuration
+    *
+    * @return int
+    */
+    public function getTaxPercent()
+    {
+        $tax = Configuration::getValueByKey("SALES_TAX");
+        return $tax < 0 ? 0 : $tax;
+    }
+
+    /**
+    * @description Returns the tax as Number
+    *
+    * @return float
+    */
+    public function getTaxValue()
+    {
+        return $this->price*$this->getTaxPercent()/100;
+    }
+
+    /**
+    * @description Returns the full price of a Product including tax
+    *
+    * @return float
+    */
+    public function getTotalPrice() 
+    {
+        return $this->price+($this->getTaxValue());
     }
 }

+ 36 - 0
database/migrations/2021_11_05_071456_add_tax_to_paymentlogs.php

@@ -0,0 +1,36 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddTaxToPaymentlogs extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('payments', function (Blueprint $table) {
+            $table->decimal('tax_value',8,2)->after('price')->nullable();
+            $table->integer('tax_percent')->after('tax_value')->nullable();
+            $table->decimal('total_price',8,2)->after('tax_percent')->nullable();    
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('payments', function (Blueprint $table) {
+            $table->dropColumn('tax_value');
+            $table->dropColumn('tax_percent');
+            $table->dropColumn('total_price');
+        });
+    }
+}

+ 8 - 0
database/seeders/Seeds/ConfigurationSeeder.php

@@ -136,6 +136,14 @@ class ConfigurationSeeder extends Seeder
             'type'        => 'boolean',
             'description' => 'Charges the first hour worth of credits upon creating a server.'
         ]);
+        //sales tax
+        Configuration::firstOrCreate([
+            'key'   => 'SALES_TAX',
+        ], [
+            'value' => '0',
+            'type'  => 'integer',
+            'description'  => 'The %-value of tax that will be added to the product price on checkout'
+        ]);
 
     }
 }

+ 7 - 1
resources/views/admin/payments/index.blade.php

@@ -37,7 +37,10 @@
                             <th>User</th>
                             <th>Type</th>
                             <th>Amount</th>
-                            <th>Price</th>
+                            <th>Product Price</th>
+                            <th>Tax</th>
+                            <th>Tax(%)</th>
+                            <th>Total Price</th>
                             <th>Payment_ID</th>
                             <th>Payer_ID</th>
                             <th>Created at</th>
@@ -68,6 +71,9 @@
                     {data: 'type'},
                     {data: 'amount'},
                     {data: 'price'},
+                    {data: 'tax_value'},
+                    {data: 'tax_percent'},
+                    {data: 'total_price'},
                     {data: 'payment_id'},
                     {data: 'payer_id'},
                     {data: 'created_at'},

+ 1 - 1
resources/views/mail/payment/confirmed.blade.php

@@ -6,7 +6,7 @@ Your payment has been confirmed; Your credit balance has been updated.<br>
 ___
 ### Payment ID: **{{$payment->id}}**<br>
 ### Status:     **{{$payment->status}}**<br>
-### Price:      **{{$payment->formatCurrency()}}**<br>
+### Price:      **{{$payment->formatToCurrency($payment->total_price)}}**<br>
 ### Type:       **{{$payment->type}}**<br>
 ### Amount:     **{{$payment->amount}}**<br>
 ### Balance:    **{{$payment->user->credits}}**<br>

+ 5 - 5
resources/views/store/checkout.blade.php

@@ -83,7 +83,7 @@
                                         <td>1</td>
                                         <td><i class="fa fa-coins mr-2"></i>{{$product->quantity}} {{strtolower($product->type) == 'credits' ? CREDITS_DISPLAY_NAME : $product->type}}</td>
                                         <td>{{$product->description}}</td>
-                                        <td>{{$product->formatCurrency()}}</td>
+                                        <td>{{$product->formatToCurrency($product->price)}}</td>
                                     </tr>
                                     </tbody>
                                 </table>
@@ -111,11 +111,11 @@
                                     <table class="table">
                                         <tr>
                                             <th style="width:50%">Subtotal:</th>
-                                            <td>{{$product->formatCurrency()}}</td>
+                                            <td>{{$product->formatToCurrency($product->price)}}</td>
                                         </tr>
                                         <tr>
-                                            <th>Tax (0%)</th>
-                                            <td>0.00</td>
+                                            <th>Tax ({{$taxpercent}}%)</th>
+                                            <td>{{$product->formatToCurrency($taxvalue)}}</td>
                                         </tr>
                                         <tr>
                                             <th>Quantity:</th>
@@ -123,7 +123,7 @@
                                         </tr>
                                         <tr>
                                             <th>Total:</th>
-                                            <td>{{$product->formatCurrency()}}</td>
+                                            <td>{{$product->formatToCurrency($total)}}</td>
                                         </tr>
                                     </table>
                                 </div>

+ 1 - 1
resources/views/store/index.blade.php

@@ -50,7 +50,7 @@
                             <?php /** @var $product PaypalProduct */?>
                             @foreach($products as $product)
                                 <tr>
-                                    <td>{{$product->formatCurrency()}}</td>
+                                    <td>{{$product->formatToCurrency($product->price)}}</td>
                                     <td>{{strtolower($product->type) == 'credits' ? CREDITS_DISPLAY_NAME : $product->type}}</td>
                                     <td><i class="fa fa-coins mr-2"></i>{{$product->display}}</td>
                                     <td><a href="{{route('checkout' , $product->id)}}" class="btn btn-info">Purchase</a>