From c3a777bdf4f33b470320d5bf6bd6efb0fe24e884 Mon Sep 17 00:00:00 2001 From: 1day2die Date: Fri, 26 Nov 2021 20:42:38 +0100 Subject: [PATCH 01/35] First COmmit --- .../Controllers/Admin/PaymentController.php | 47 ++- composer.json | 1 + composer.lock | 337 ++++++++++++++- config/invoices.php | 97 +++++ public/vendor/invoices/sample-logo.png | Bin 0 -> 44248 bytes resources/lang/vendor/invoices/en/invoice.php | 38 ++ resources/lang/vendor/invoices/nl/invoice.php | 38 ++ .../invoices/templates/default.blade.php | 386 ++++++++++++++++++ 8 files changed, 939 insertions(+), 5 deletions(-) create mode 100644 config/invoices.php create mode 100644 public/vendor/invoices/sample-logo.png create mode 100644 resources/lang/vendor/invoices/en/invoice.php create mode 100644 resources/lang/vendor/invoices/nl/invoice.php create mode 100644 resources/views/vendor/invoices/templates/default.blade.php diff --git a/app/Http/Controllers/Admin/PaymentController.php b/app/Http/Controllers/Admin/PaymentController.php index 4c52a310..b5b68677 100644 --- a/app/Http/Controllers/Admin/PaymentController.php +++ b/app/Http/Controllers/Admin/PaymentController.php @@ -18,12 +18,16 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use LaravelDaily\Invoices\Classes\Party; use PayPalCheckoutSdk\Core\PayPalHttpClient; use PayPalCheckoutSdk\Core\ProductionEnvironment; use PayPalCheckoutSdk\Core\SandboxEnvironment; use PayPalCheckoutSdk\Orders\OrdersCaptureRequest; use PayPalCheckoutSdk\Orders\OrdersCreateRequest; use PayPalHttp\HttpException; +use LaravelDaily\Invoices\Invoice; +use LaravelDaily\Invoices\Classes\Buyer; +use LaravelDaily\Invoices\Classes\InvoiceItem; class PaymentController extends Controller { @@ -93,7 +97,7 @@ class PaymentController extends Controller 'shipping_preference' => 'NO_SHIPPING' ] - + ]; @@ -164,7 +168,7 @@ class PaymentController extends Controller $user->update(['server_limit' => Configuration::getValueByKey('SERVER_LIMIT_AFTER_IRL_PURCHASE')]); } } - + //update role if ($user->role == 'member') { $user->update(['role' => 'client']); @@ -191,8 +195,45 @@ class PaymentController extends Controller event(new UserUpdateCreditsEvent($user)); + //create invoice + $seller = new Party([ + 'name' => 'Dennis L', + 'phone' => '1234513', + 'address' => 'Deutschlandstr 4, 66666 Hell', + 'custom_fields' => [ + 'UST_ID' => '365#GG', + ], + ]); + + + + $customer = new Buyer([ + 'name' => 'Dennis Leipe', + 'custom_fields' => [ + 'email' => 'dleipe@hafuga.de', + 'order number' => '> 654321 <', + ], + ]); + $item = (new InvoiceItem())->title($paypalProduct->description)->pricePerUnit($paypalProduct->price); + + $invoice = Invoice::make() + ->buyer($customer) + ->seller($seller) + ->discountByPercent(0) + ->taxRate(floatval($paypalProduct->getTaxPercent())) + ->shipping(0) + ->addItem($item) + ->series('BIG') + + ->status(__('invoices::invoice.paid')) + ->sequence(667) + ->serialNumberFormat('{SEQUENCE}/{SERIES}') + + ->save('public'); + + //redirect back to home - return redirect()->route('home')->with('success', 'Your credit balance has been increased!'); + return redirect()->route('home')->with('success', 'Your credit balance has been increased! Invoice: '.$invoice->url()); } // If call returns body in response, you can get the deserialized version from the result attribute of the response diff --git a/composer.json b/composer.json index 8873c2be..0c47b586 100644 --- a/composer.json +++ b/composer.json @@ -19,6 +19,7 @@ "laravel/framework": "^8.12", "laravel/tinker": "^2.5", "laravel/ui": "^3.2", + "laraveldaily/laravel-invoices": "^2.0", "paypal/paypal-checkout-sdk": "^1.0", "paypal/rest-api-sdk-php": "^1.14", "socialiteproviders/discord": "^4.1", diff --git a/composer.lock b/composer.lock index a8ba8147..59eecaf3 100644 --- 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": "500346cc4a4a83b162e07bb0071d1602", + "content-hash": "51c5797dc1629fe1f42b1fdc91c6e5d8", "packages": [ { "name": "asm89/stack-cors", @@ -62,6 +62,72 @@ }, "time": "2021-03-11T06:42:03+00:00" }, + { + "name": "barryvdh/laravel-dompdf", + "version": "v0.9.0", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-dompdf.git", + "reference": "5b99e1f94157d74e450f4c97e8444fcaffa2144b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/5b99e1f94157d74e450f4c97e8444fcaffa2144b", + "reference": "5b99e1f94157d74e450f4c97e8444fcaffa2144b", + "shasum": "" + }, + "require": { + "dompdf/dompdf": "^1", + "illuminate/support": "^5.5|^6|^7|^8", + "php": "^7.1 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.9-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\DomPDF\\ServiceProvider" + ], + "aliases": { + "PDF": "Barryvdh\\DomPDF\\Facade" + } + } + }, + "autoload": { + "psr-4": { + "Barryvdh\\DomPDF\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "A DOMPDF Wrapper for Laravel", + "keywords": [ + "dompdf", + "laravel", + "pdf" + ], + "support": { + "issues": "https://github.com/barryvdh/laravel-dompdf/issues", + "source": "https://github.com/barryvdh/laravel-dompdf/tree/v0.9.0" + }, + "funding": [ + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2020-12-27T12:05:53+00:00" + }, { "name": "biscolab/laravel-recaptcha", "version": "5.0.1", @@ -780,6 +846,73 @@ ], "time": "2020-05-25T17:44:05+00:00" }, + { + "name": "dompdf/dompdf", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/dompdf/dompdf.git", + "reference": "de4aad040737a89fae2129cdeb0f79c45513128d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/de4aad040737a89fae2129cdeb0f79c45513128d", + "reference": "de4aad040737a89fae2129cdeb0f79c45513128d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "phenx/php-font-lib": "^0.5.2", + "phenx/php-svg-lib": "^0.3.3", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.3", + "phpunit/phpunit": "^7.5 || ^8 || ^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "ext-gd": "Needed to process images", + "ext-gmagick": "Improves image processing performance", + "ext-imagick": "Improves image processing performance", + "ext-zlib": "Needed for pdf stream compression" + }, + "type": "library", + "autoload": { + "psr-4": { + "Dompdf\\": "src/" + }, + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + }, + { + "name": "Brian Sweeney", + "email": "eclecticgeek@gmail.com" + }, + { + "name": "Gabriel Bull", + "email": "me@gabrielbull.com" + } + ], + "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", + "homepage": "https://github.com/dompdf/dompdf", + "support": { + "issues": "https://github.com/dompdf/dompdf/issues", + "source": "https://github.com/dompdf/dompdf/tree/v1.1.1" + }, + "time": "2021-11-24T00:45:04+00:00" + }, { "name": "dragonmantank/cron-expression", "version": "v3.1.0", @@ -1763,6 +1896,71 @@ }, "time": "2021-05-25T16:45:33+00:00" }, + { + "name": "laraveldaily/laravel-invoices", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/LaravelDaily/laravel-invoices.git", + "reference": "88c472680951acc57ccf179711add7d8dda36821" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/LaravelDaily/laravel-invoices/zipball/88c472680951acc57ccf179711add7d8dda36821", + "reference": "88c472680951acc57ccf179711add7d8dda36821", + "shasum": "" + }, + "require": { + "barryvdh/laravel-dompdf": "^0.9", + "illuminate/http": "^5.5|^6|^7|^8", + "illuminate/support": "^5.5|^6|^7|^8", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^8.4", + "symfony/var-dumper": "^5.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelDaily\\Invoices\\InvoiceServiceProvider" + ], + "aliases": { + "Invoice": "LaravelDaily\\Invoices\\Facades\\Invoice" + } + } + }, + "autoload": { + "psr-4": { + "LaravelDaily\\Invoices\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Lun", + "email": "mysticcode@gmail.com", + "homepage": "https://lun.lt", + "role": "Developer" + } + ], + "description": "Missing invoices for Laravel", + "homepage": "https://github.com/LaravelDaily/laravel-invoices", + "keywords": [ + "invoice", + "invoices", + "laravel" + ], + "support": { + "issues": "https://github.com/LaravelDaily/laravel-invoices/issues", + "source": "https://github.com/LaravelDaily/laravel-invoices/tree/2.2.0" + }, + "time": "2021-09-29T08:31:40+00:00" + }, { "name": "league/commonmark", "version": "1.6.2", @@ -2601,6 +2799,92 @@ "abandoned": true, "time": "2019-01-04T20:04:25+00:00" }, + { + "name": "phenx/php-font-lib", + "version": "0.5.2", + "source": { + "type": "git", + "url": "https://github.com/PhenX/php-font-lib.git", + "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/ca6ad461f032145fff5971b5985e5af9e7fa88d8", + "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5 || ^6 || ^7" + }, + "type": "library", + "autoload": { + "psr-4": { + "FontLib\\": "src/FontLib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse, export and make subsets of different types of font files.", + "homepage": "https://github.com/PhenX/php-font-lib", + "support": { + "issues": "https://github.com/PhenX/php-font-lib/issues", + "source": "https://github.com/PhenX/php-font-lib/tree/0.5.2" + }, + "time": "2020-03-08T15:31:32+00:00" + }, + { + "name": "phenx/php-svg-lib", + "version": "0.3.4", + "source": { + "type": "git", + "url": "https://github.com/PhenX/php-svg-lib.git", + "reference": "f627771eb854aa7f45f80add0f23c6c4d67ea0f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/f627771eb854aa7f45f80add0f23c6c4d67ea0f2", + "reference": "f627771eb854aa7f45f80add0f23c6c4d67ea0f2", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "sabberworm/php-css-parser": "^8.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Svg\\": "src/Svg" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse and export to PDF SVG files.", + "homepage": "https://github.com/PhenX/php-svg-lib", + "support": { + "issues": "https://github.com/PhenX/php-svg-lib/issues", + "source": "https://github.com/PhenX/php-svg-lib/tree/0.3.4" + }, + "time": "2021-10-18T02:13:32+00:00" + }, { "name": "phpoption/phpoption", "version": "1.7.5", @@ -3262,6 +3546,55 @@ ], "time": "2020-08-18T17:17:46+00:00" }, + { + "name": "sabberworm/php-css-parser", + "version": "8.3.1", + "source": { + "type": "git", + "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", + "reference": "d217848e1396ef962fb1997cf3e2421acba7f796" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/d217848e1396ef962fb1997cf3e2421acba7f796", + "reference": "d217848e1396ef962fb1997cf3e2421acba7f796", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "codacy/coverage": "^1.4", + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-0": { + "Sabberworm\\CSS": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Schweikert" + } + ], + "description": "Parser for CSS Files written in PHP", + "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "keywords": [ + "css", + "parser", + "stylesheet" + ], + "support": { + "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", + "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.3.1" + }, + "time": "2020-06-01T09:10:00+00:00" + }, { "name": "socialiteproviders/discord", "version": "4.1.1", @@ -8931,5 +9264,5 @@ "ext-intl": "*" }, "platform-dev": [], - "plugin-api-version": "2.0.0" + "plugin-api-version": "2.1.0" } diff --git a/config/invoices.php b/config/invoices.php new file mode 100644 index 00000000..772ef1fd --- /dev/null +++ b/config/invoices.php @@ -0,0 +1,97 @@ + [ + /* + * Carbon date format + */ + 'format' => 'Y-m-d', + /* + * Due date for payment since invoice's date. + */ + 'pay_until_days' => 7, + ], + + 'serial_number' => [ + 'series' => 'AA', + 'sequence' => 1, + /* + * Sequence will be padded accordingly, for ex. 00001 + */ + 'sequence_padding' => 5, + 'delimiter' => '.', + /* + * Supported tags {SERIES}, {DELIMITER}, {SEQUENCE} + * Example: AA.00001 + */ + 'format' => '{SERIES}{DELIMITER}{SEQUENCE}', + ], + + 'currency' => [ + 'code' => 'eur', + /* + * Usually cents + * Used when spelling out the amount and if your currency has decimals. + * + * Example: Amount in words: Eight hundred fifty thousand sixty-eight EUR and fifteen ct. + */ + 'fraction' => 'ct.', + 'symbol' => '€', + /* + * Example: 19.00 + */ + 'decimals' => 2, + /* + * Example: 1.99 + */ + 'decimal_point' => '.', + /* + * By default empty. + * Example: 1,999.00 + */ + 'thousands_separator' => '', + /* + * Supported tags {VALUE}, {SYMBOL}, {CODE} + * Example: 1.99 € + */ + 'format' => '{VALUE} {SYMBOL}', + ], + + 'paper' => [ + // A4 = 210 mm x 297 mm = 595 pt x 842 pt + 'size' => 'a4', + 'orientation' => 'portrait', + ], + + 'disk' => 'local', + + 'seller' => [ + /* + * Class used in templates via $invoice->seller + * + * Must implement LaravelDaily\Invoices\Contracts\PartyContract + * or extend LaravelDaily\Invoices\Classes\Party + */ + 'class' => \LaravelDaily\Invoices\Classes\Seller::class, + + /* + * Default attributes for Seller::class + */ + 'attributes' => [ + 'name' => 'Towne, Smith and Ebert', + 'address' => '89982 Pfeffer Falls Damianstad, CO 66972-8160', + 'code' => '41-1985581', + 'vat' => '123456789', + 'phone' => '760-355-3930', + 'custom_fields' => [ + /* + * Custom attributes for Seller::class + * + * Used to display additional info on Seller section in invoice + * attribute => value + */ + 'SWIFT' => 'BANK101', + ], + ], + ], +]; diff --git a/public/vendor/invoices/sample-logo.png b/public/vendor/invoices/sample-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6e5fa7c6fcb1db2db80a0fcb2619f65c59feede3 GIT binary patch literal 44248 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 LNkvXXu0mjfk2qcb literal 0 HcmV?d00001 diff --git a/resources/lang/vendor/invoices/en/invoice.php b/resources/lang/vendor/invoices/en/invoice.php new file mode 100644 index 00000000..5bd30fe4 --- /dev/null +++ b/resources/lang/vendor/invoices/en/invoice.php @@ -0,0 +1,38 @@ + 'Invoice', + 'serial' => 'Serial No.', + 'date' => 'Invoice date', + 'seller' => 'Seller', + 'buyer' => 'Buyer', + 'address' => 'Address', + 'code' => 'Code', + 'vat' => 'VAT code', + 'phone' => 'Phone', + 'description' => 'Description', + 'units' => 'Units', + 'quantity' => 'Qty', + 'price' => 'Price', + 'discount' => 'Discount', + 'tax' => 'Tax', + 'sub_total' => 'Sub total', + 'total_discount' => 'Total discount', + 'taxable_amount' => 'Taxable amount', + 'total_taxes' => 'Total taxes', + 'tax_rate' => 'Tax rate', + 'total_amount' => 'Total amount', + 'pay_until' => 'Please pay until', + 'amount_in_words' => 'Amount in words', + 'amount_in_words_format' => '%s %s and %s %s', + 'notes' => 'Notes', + 'shipping' => 'Shipping', + 'paid' => 'Paid', + 'due' => 'Due', +]; diff --git a/resources/lang/vendor/invoices/nl/invoice.php b/resources/lang/vendor/invoices/nl/invoice.php new file mode 100644 index 00000000..1e171c47 --- /dev/null +++ b/resources/lang/vendor/invoices/nl/invoice.php @@ -0,0 +1,38 @@ + 'Factuur', + 'serial' => 'Factuurnummer', + 'date' => 'Factuurdatum', + 'seller' => 'Leverancier', + 'buyer' => 'Afnemer', + 'address' => 'Adres', + 'code' => 'Code', + 'vat' => 'Btw-identificatienummer', + 'phone' => 'Telefoonnummer', + 'description' => 'Omschrijving', + 'units' => 'Eenheid', + 'quantity' => 'Aantal', + 'price' => 'Prijs', + 'discount' => 'Korting', + 'tax' => 'Belasting', + 'sub_total' => 'Subtotaal', + 'total_discount' => 'Totale korting', + 'taxable_amount' => 'Belastbaar bedrag', + 'total_taxes' => 'Totaal belastingen', + 'tax_rate' => 'Belastingtarief', + 'total_amount' => 'Totaalbedrag', + 'pay_until' => 'Gelieve te betalen voor', + 'amount_in_words' => 'Totaalbedrag in woorden', + 'amount_in_words_format' => '%s %s en %s %s', + 'notes' => 'Opmerkingen', + 'shipping' => 'Verzending', + 'paid' => 'Betaald', + 'due' => 'Openstaand', +]; diff --git a/resources/views/vendor/invoices/templates/default.blade.php b/resources/views/vendor/invoices/templates/default.blade.php new file mode 100644 index 00000000..2c4ad699 --- /dev/null +++ b/resources/views/vendor/invoices/templates/default.blade.php @@ -0,0 +1,386 @@ + + + + {{ $invoice->name }} + + + + + + + {{-- Header --}} + @if($invoice->logo) + logo + @endif + + + + + + + + +
+

+ {{ $invoice->name }} +

+
+ @if($invoice->status) +

+ {{ $invoice->status }} +

+ @endif +

{{ __('invoices::invoice.serial') }} {{ $invoice->getSerialNumber() }}

+

{{ __('invoices::invoice.date') }}: {{ $invoice->getDate() }}

+
+ + {{-- Seller - Buyer --}} + + + + + + + + + + + + + + + +
+ {{ __('invoices::invoice.seller') }} + + {{ __('invoices::invoice.buyer') }} +
+ @if($invoice->seller->name) +

+ {{ $invoice->seller->name }} +

+ @endif + + @if($invoice->seller->address) +

+ {{ __('invoices::invoice.address') }}: {{ $invoice->seller->address }} +

+ @endif + + @if($invoice->seller->code) +

+ {{ __('invoices::invoice.code') }}: {{ $invoice->seller->code }} +

+ @endif + + @if($invoice->seller->vat) +

+ {{ __('invoices::invoice.vat') }}: {{ $invoice->seller->vat }} +

+ @endif + + @if($invoice->seller->phone) +

+ {{ __('invoices::invoice.phone') }}: {{ $invoice->seller->phone }} +

+ @endif + + @foreach($invoice->seller->custom_fields as $key => $value) +

+ {{ ucfirst($key) }}: {{ $value }} +

+ @endforeach +
+ @if($invoice->buyer->name) +

+ {{ $invoice->buyer->name }} +

+ @endif + + @if($invoice->buyer->address) +

+ {{ __('invoices::invoice.address') }}: {{ $invoice->buyer->address }} +

+ @endif + + @if($invoice->buyer->code) +

+ {{ __('invoices::invoice.code') }}: {{ $invoice->buyer->code }} +

+ @endif + + @if($invoice->buyer->vat) +

+ {{ __('invoices::invoice.vat') }}: {{ $invoice->buyer->vat }} +

+ @endif + + @if($invoice->buyer->phone) +

+ {{ __('invoices::invoice.phone') }}: {{ $invoice->buyer->phone }} +

+ @endif + + @foreach($invoice->buyer->custom_fields as $key => $value) +

+ {{ ucfirst($key) }}: {{ $value }} +

+ @endforeach +
+ + {{-- Table --}} + + + + + @if($invoice->hasItemUnits) + + @endif + + + @if($invoice->hasItemDiscount) + + @endif + @if($invoice->hasItemTax) + + @endif + + + + + {{-- Items --}} + @foreach($invoice->items as $item) + + + @if($invoice->hasItemUnits) + + @endif + + + @if($invoice->hasItemDiscount) + + @endif + @if($invoice->hasItemTax) + + @endif + + + + @endforeach + {{-- Summary --}} + @if($invoice->hasItemOrInvoiceDiscount()) + + + + + + @endif + @if($invoice->taxable_amount) + + + + + + @endif + @if($invoice->tax_rate) + + + + + + @endif + @if($invoice->hasItemOrInvoiceTax()) + + + + + + @endif + @if($invoice->shipping_amount) + + + + + + @endif + + + + + + +
{{ __('invoices::invoice.description') }}{{ __('invoices::invoice.units') }}{{ __('invoices::invoice.quantity') }}{{ __('invoices::invoice.price') }}{{ __('invoices::invoice.discount') }}{{ __('invoices::invoice.tax') }}{{ __('invoices::invoice.sub_total') }}
+ {{ $item->title }} + + @if($item->description) +

{{ $item->description }}

+ @endif +
{{ $item->units }}{{ $item->quantity }} + {{ $invoice->formatCurrency($item->price_per_unit) }} + + {{ $invoice->formatCurrency($item->discount) }} + + {{ $invoice->formatCurrency($item->tax) }} + + {{ $invoice->formatCurrency($item->sub_total_price) }} +
{{ __('invoices::invoice.total_discount') }} + {{ $invoice->formatCurrency($invoice->total_discount) }} +
{{ __('invoices::invoice.taxable_amount') }} + {{ $invoice->formatCurrency($invoice->taxable_amount) }} +
{{ __('invoices::invoice.tax_rate') }} + {{ $invoice->tax_rate }}% +
{{ __('invoices::invoice.total_taxes') }} + {{ $invoice->formatCurrency($invoice->total_taxes) }} +
{{ __('invoices::invoice.shipping') }} + {{ $invoice->formatCurrency($invoice->shipping_amount) }} +
{{ __('invoices::invoice.total_amount') }} + {{ $invoice->formatCurrency($invoice->total_amount) }} +
+ + @if($invoice->notes) +

+ {{ trans('invoices::invoice.notes') }}: {!! $invoice->notes !!} +

+ @endif + +

+ {{ trans('invoices::invoice.amount_in_words') }}: {{ $invoice->getTotalAmountInWords() }} +

+

+ {{ trans('invoices::invoice.pay_until') }}: {{ $invoice->getPayUntilDate() }} +

+ + + + From bf848f0bcb4f9226c18d2e390730f57640874896 Mon Sep 17 00:00:00 2001 From: 1day2die Date: Fri, 26 Nov 2021 20:46:26 +0100 Subject: [PATCH 02/35] lul --- app/Http/Controllers/Admin/PaymentController.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Admin/PaymentController.php b/app/Http/Controllers/Admin/PaymentController.php index b5b68677..826c8658 100644 --- a/app/Http/Controllers/Admin/PaymentController.php +++ b/app/Http/Controllers/Admin/PaymentController.php @@ -197,20 +197,21 @@ class PaymentController extends Controller //create invoice $seller = new Party([ - 'name' => 'Dennis L', - 'phone' => '1234513', + 'name' => 'Hafuga Company', + 'phone' => '+49 12346709', 'address' => 'Deutschlandstr 4, 66666 Hell', 'custom_fields' => [ 'UST_ID' => '365#GG', + 'E-Mail' => 'invoice@hafuga.de', ], ]); $customer = new Buyer([ - 'name' => 'Dennis Leipe', + 'name' => 'Not Dennis', 'custom_fields' => [ - 'email' => 'dleipe@hafuga.de', + 'email' => 'customer@google.de', 'order number' => '> 654321 <', ], ]); From 21b9d700355a329022e0c3f2c7937075bb2c9a2d Mon Sep 17 00:00:00 2001 From: 1day2die Date: Sat, 27 Nov 2021 02:47:36 +0100 Subject: [PATCH 03/35] invoice DB, counting up, format stuff --- .gitignore | 1 + .../Controllers/Admin/PaymentController.php | 24 ++++++-- app/Models/Invoice.php | 20 +++++++ app/Notifications/InvoiceNotification.php | 55 +++++++++++++++++++ .../2021_11_27_014226_create_invoices.php | 34 ++++++++++++ .../invoices/templates/default.blade.php | 1 + 6 files changed, 130 insertions(+), 5 deletions(-) create mode 100644 app/Models/Invoice.php create mode 100644 app/Notifications/InvoiceNotification.php create mode 100644 database/migrations/2021_11_27_014226_create_invoices.php diff --git a/.gitignore b/.gitignore index 9dd097b7..7639c9af 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ yarn-error.log .gitignore .env.dev .env.testing +public/vendor/invoices/logo.png diff --git a/app/Http/Controllers/Admin/PaymentController.php b/app/Http/Controllers/Admin/PaymentController.php index 826c8658..fb4d0526 100644 --- a/app/Http/Controllers/Admin/PaymentController.php +++ b/app/Http/Controllers/Admin/PaymentController.php @@ -10,6 +10,7 @@ use App\Models\PaypalProduct; use App\Models\Product; use App\Models\User; use App\Notifications\ConfirmPaymentNotification; +use App\Notifications\InvoiceNotification; use Exception; use Illuminate\Contracts\Foundation\Application; use Illuminate\Contracts\View\Factory; @@ -217,6 +218,9 @@ class PaymentController extends Controller ]); $item = (new InvoiceItem())->title($paypalProduct->description)->pricePerUnit($paypalProduct->price); + $lastInvoiceID = \App\Models\invoice::where("invoice_name","like","%".now()->format('M')."%")->max("id"); + $newInvoiceID = $lastInvoiceID + 1; + $invoice = Invoice::make() ->buyer($customer) ->seller($seller) @@ -224,19 +228,29 @@ class PaymentController extends Controller ->taxRate(floatval($paypalProduct->getTaxPercent())) ->shipping(0) ->addItem($item) - ->series('BIG') - ->status(__('invoices::invoice.paid')) - ->sequence(667) - ->serialNumberFormat('{SEQUENCE}/{SERIES}') + + ->series(now()->format('M')) + ->delimiter("-") + ->sequence($newInvoiceID) + ->serialNumberFormat('{SEQUENCE} - {SERIES}') + + ->logo(public_path('vendor/invoices/logo.png')) ->save('public'); + $user->notify(new InvoiceNotification($invoice)); + \App\Models\invoice::create([ + 'invoice_user' => $user->id, + 'invoice_name' => "invoice_".$invoice->series.$invoice->delimiter.$invoice->sequence, + 'payment_id' => $payment->payment_id, + ]); //redirect back to home - return redirect()->route('home')->with('success', 'Your credit balance has been increased! Invoice: '.$invoice->url()); + return redirect()->route('home')->with('success', 'Your credit balance has been increased! Find the invoice in your Notifications'); } + // If call returns body in response, you can get the deserialized version from the result attribute of the response if (env('APP_ENV') == 'local') { dd($response); diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php new file mode 100644 index 00000000..e117b039 --- /dev/null +++ b/app/Models/Invoice.php @@ -0,0 +1,20 @@ +invoice = $invoice; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['database']; + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + 'title' => "Invoice Created: Nr.".$this->invoice->sequence, + 'content' => " +

Find it here.

+ ", + ]; + } +} diff --git a/database/migrations/2021_11_27_014226_create_invoices.php b/database/migrations/2021_11_27_014226_create_invoices.php new file mode 100644 index 00000000..f2716c05 --- /dev/null +++ b/database/migrations/2021_11_27_014226_create_invoices.php @@ -0,0 +1,34 @@ +id(); + $table->string('invoice_name'); + $table->string('invoice_user'); + $table->string('payment_id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('invoices'); + } +} diff --git a/resources/views/vendor/invoices/templates/default.blade.php b/resources/views/vendor/invoices/templates/default.blade.php index 2c4ad699..c288a766 100644 --- a/resources/views/vendor/invoices/templates/default.blade.php +++ b/resources/views/vendor/invoices/templates/default.blade.php @@ -136,6 +136,7 @@ +

From 67d0b66091962bb3b1299015e687e517ed141e07 Mon Sep 17 00:00:00 2001 From: WBLKLeipe Date: Tue, 30 Nov 2021 14:09:13 +0100 Subject: [PATCH 04/35] attach mail --- .gitignore | 3 +-- app/Notifications/InvoiceNotification.php | 19 +++++++++--------- .../invoices/{sample-logo.png => logo.png} | Bin 3 files changed, 11 insertions(+), 11 deletions(-) rename public/vendor/invoices/{sample-logo.png => logo.png} (100%) diff --git a/.gitignore b/.gitignore index 7639c9af..74015e4f 100644 --- a/.gitignore +++ b/.gitignore @@ -17,5 +17,4 @@ npm-debug.log yarn-error.log .gitignore .env.dev -.env.testing -public/vendor/invoices/logo.png +.env.testing \ No newline at end of file diff --git a/app/Notifications/InvoiceNotification.php b/app/Notifications/InvoiceNotification.php index d4b504b8..3a3acbde 100644 --- a/app/Notifications/InvoiceNotification.php +++ b/app/Notifications/InvoiceNotification.php @@ -4,6 +4,7 @@ namespace App\Notifications; use App\Models\Server; use Illuminate\Bus\Queueable; +use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; use LaravelDaily\Invoices\Invoice; @@ -34,22 +35,22 @@ class InvoiceNotification extends Notification */ public function via($notifiable) { - return ['database']; + return ['mail']; } /** * Get the array representation of the notification. * * @param mixed $notifiable - * @return array + * @return MailMessage */ - public function toArray($notifiable) + public function toMail($notifiable) { - return [ - 'title' => "Invoice Created: Nr.".$this->invoice->sequence, - 'content' => " -

Find it here.

- ", - ]; + return (new MailMessage) + ->subject('Your Invoice!') + ->greeting('Your invoice is ready') + ->line("Skurr skurr.") + ->line('damn son.') + ->attach($this->invoice->stream()); } } diff --git a/public/vendor/invoices/sample-logo.png b/public/vendor/invoices/logo.png similarity index 100% rename from public/vendor/invoices/sample-logo.png rename to public/vendor/invoices/logo.png From 92f048c4bd87a7485b5d8b369f5223fc9f6a87fa Mon Sep 17 00:00:00 2001 From: WBLKLeipe Date: Tue, 30 Nov 2021 14:52:36 +0100 Subject: [PATCH 05/35] save invoice in correct path --- app/Http/Controllers/Admin/PaymentController.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Admin/PaymentController.php b/app/Http/Controllers/Admin/PaymentController.php index fb4d0526..a24ecbbe 100644 --- a/app/Http/Controllers/Admin/PaymentController.php +++ b/app/Http/Controllers/Admin/PaymentController.php @@ -19,6 +19,7 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Storage; use LaravelDaily\Invoices\Classes\Party; use PayPalCheckoutSdk\Core\PayPalHttpClient; use PayPalCheckoutSdk\Core\ProductionEnvironment; @@ -230,16 +231,18 @@ class PaymentController extends Controller ->addItem($item) ->status(__('invoices::invoice.paid')) - ->series(now()->format('M')) + ->series(now()->format('M_Y')) ->delimiter("-") ->sequence($newInvoiceID) ->serialNumberFormat('{SEQUENCE} - {SERIES}') ->logo(public_path('vendor/invoices/logo.png')) + ->save("local"); + //Save the invoice in "storage\app\invoice\USER_ID\YEAR" + $invoice->render(); + Storage::disk("local")->put("invoice/".$user->id."/".now()->format('Y')."/".$invoice->filename, $invoice->output); - ->save('public'); - - $user->notify(new InvoiceNotification($invoice)); + // $user->notify(new InvoiceNotification($invoice)); \App\Models\invoice::create([ 'invoice_user' => $user->id, From 928086953c0d1a98b002fd10f53756baf859cbda Mon Sep 17 00:00:00 2001 From: WBLKLeipe Date: Tue, 30 Nov 2021 15:50:43 +0100 Subject: [PATCH 06/35] Logo, Template and Invoice stuff --- .env.example | 6 ++++ .../Controllers/Admin/PaymentController.php | 27 +++++++++--------- public/vendor/invoices/logo.png | Bin 44248 -> 21607 bytes .../invoices/templates/default.blade.php | 2 +- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/.env.example b/.env.example index c7016a83..88982091 100644 --- a/.env.example +++ b/.env.example @@ -23,6 +23,12 @@ PAYPAL_SECRET= PAYPAL_CLIENT_ID= PAYPAL_EMAIL= +#INVOICE RELATED - put every value in quotes "" +COMPANY_PHONE= +COMPANY_ADRESS= +COMPANY_VAT_ID= +INVOICE_PREFIX= + #set-up for extra discord verification DISCORD_CLIENT_ID= DISCORD_CLIENT_SECRET= diff --git a/app/Http/Controllers/Admin/PaymentController.php b/app/Http/Controllers/Admin/PaymentController.php index a24ecbbe..960d720a 100644 --- a/app/Http/Controllers/Admin/PaymentController.php +++ b/app/Http/Controllers/Admin/PaymentController.php @@ -198,30 +198,31 @@ class PaymentController extends Controller event(new UserUpdateCreditsEvent($user)); //create invoice + $lastInvoiceID = \App\Models\invoice::where("invoice_name","like","%".now()->format('mY')."%")->max("id"); + $newInvoiceID = $lastInvoiceID + 1; + $seller = new Party([ - 'name' => 'Hafuga Company', - 'phone' => '+49 12346709', - 'address' => 'Deutschlandstr 4, 66666 Hell', + 'name' => env("APP_NAME", "Controlpanel.gg"), + 'phone' => env("COMPANY_PHONE",""), + 'address' => env("COMPANY_ADRESS",""), 'custom_fields' => [ - 'UST_ID' => '365#GG', - 'E-Mail' => 'invoice@hafuga.de', + 'VAT ID' => env("COMPANY_VAT_ID",""), + 'E-Mail' => env("MAIL_FROM_ADDRESS", "company@mail.com"), + "Web" => env("APP_URL","https://controlpanel.gg") ], ]); $customer = new Buyer([ - 'name' => 'Not Dennis', + 'name' => $user->name, 'custom_fields' => [ - 'email' => 'customer@google.de', - 'order number' => '> 654321 <', + 'E-Mail' => $user->email, + 'Client ID' => $user->id, ], ]); $item = (new InvoiceItem())->title($paypalProduct->description)->pricePerUnit($paypalProduct->price); - $lastInvoiceID = \App\Models\invoice::where("invoice_name","like","%".now()->format('M')."%")->max("id"); - $newInvoiceID = $lastInvoiceID + 1; - $invoice = Invoice::make() ->buyer($customer) ->seller($seller) @@ -231,10 +232,10 @@ class PaymentController extends Controller ->addItem($item) ->status(__('invoices::invoice.paid')) - ->series(now()->format('M_Y')) + ->series(now()->format('mY')) ->delimiter("-") ->sequence($newInvoiceID) - ->serialNumberFormat('{SEQUENCE} - {SERIES}') + ->serialNumberFormat(env("INVOICE_PREFIX","").'-{SERIES}{SEQUENCE}') ->logo(public_path('vendor/invoices/logo.png')) ->save("local"); diff --git a/public/vendor/invoices/logo.png b/public/vendor/invoices/logo.png index 6e5fa7c6fcb1db2db80a0fcb2619f65c59feede3..f2afb9c38ead1439021eafd140119f5be25127fd 100644 GIT binary patch literal 21607 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 C&QV+d literal 44248 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 LNkvXXu0mjfk2qcb diff --git a/resources/views/vendor/invoices/templates/default.blade.php b/resources/views/vendor/invoices/templates/default.blade.php index c288a766..deaaf97a 100644 --- a/resources/views/vendor/invoices/templates/default.blade.php +++ b/resources/views/vendor/invoices/templates/default.blade.php @@ -140,7 +140,7 @@

- {{ $invoice->name }} + {{ $invoice->name }} {{$invoice->getSerialNumber()}}

From 69c41620b863f44f0fbe2664b0b8a2070d1a8c6b Mon Sep 17 00:00:00 2001 From: WBLKLeipe Date: Tue, 30 Nov 2021 16:00:26 +0100 Subject: [PATCH 07/35] remove wrong save --- app/Http/Controllers/Admin/PaymentController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Admin/PaymentController.php b/app/Http/Controllers/Admin/PaymentController.php index 960d720a..7e54fa5a 100644 --- a/app/Http/Controllers/Admin/PaymentController.php +++ b/app/Http/Controllers/Admin/PaymentController.php @@ -237,8 +237,8 @@ class PaymentController extends Controller ->sequence($newInvoiceID) ->serialNumberFormat(env("INVOICE_PREFIX","").'-{SERIES}{SEQUENCE}') - ->logo(public_path('vendor/invoices/logo.png')) - ->save("local"); + ->logo(public_path('vendor/invoices/logo.png')); + //Save the invoice in "storage\app\invoice\USER_ID\YEAR" $invoice->render(); Storage::disk("local")->put("invoice/".$user->id."/".now()->format('Y')."/".$invoice->filename, $invoice->output); From 8cfabf7088f43044987e127eace3cb195bc31a67 Mon Sep 17 00:00:00 2001 From: WBLKLeipe Date: Tue, 30 Nov 2021 16:30:48 +0100 Subject: [PATCH 08/35] small fixes --- .env.example | 2 +- app/Http/Controllers/Admin/PaymentController.php | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.env.example b/.env.example index 88982091..3820a0f6 100644 --- a/.env.example +++ b/.env.example @@ -27,7 +27,7 @@ PAYPAL_EMAIL= COMPANY_PHONE= COMPANY_ADRESS= COMPANY_VAT_ID= -INVOICE_PREFIX= +INVOICE_PREFIX="INV" #set-up for extra discord verification DISCORD_CLIENT_ID= diff --git a/app/Http/Controllers/Admin/PaymentController.php b/app/Http/Controllers/Admin/PaymentController.php index 7e54fa5a..71d08969 100644 --- a/app/Http/Controllers/Admin/PaymentController.php +++ b/app/Http/Controllers/Admin/PaymentController.php @@ -205,8 +205,8 @@ class PaymentController extends Controller 'name' => env("APP_NAME", "Controlpanel.gg"), 'phone' => env("COMPANY_PHONE",""), 'address' => env("COMPANY_ADRESS",""), + 'vat' => env("COMPANY_VAT_ID",""), 'custom_fields' => [ - 'VAT ID' => env("COMPANY_VAT_ID",""), 'E-Mail' => env("MAIL_FROM_ADDRESS", "company@mail.com"), "Web" => env("APP_URL","https://controlpanel.gg") ], @@ -214,6 +214,7 @@ class PaymentController extends Controller + $customer = new Buyer([ 'name' => $user->name, 'custom_fields' => [ @@ -235,10 +236,10 @@ class PaymentController extends Controller ->series(now()->format('mY')) ->delimiter("-") ->sequence($newInvoiceID) - ->serialNumberFormat(env("INVOICE_PREFIX","").'-{SERIES}{SEQUENCE}') + ->serialNumberFormat(env("INVOICE_PREFIX","INV").'{DELIMITER}{SERIES}{SEQUENCE}') ->logo(public_path('vendor/invoices/logo.png')); - + //Save the invoice in "storage\app\invoice\USER_ID\YEAR" $invoice->render(); Storage::disk("local")->put("invoice/".$user->id."/".now()->format('Y')."/".$invoice->filename, $invoice->output); From c12e825b2e9610801aedfdb886485e9b62748536 Mon Sep 17 00:00:00 2001 From: 1day2die Date: Tue, 30 Nov 2021 18:18:15 +0100 Subject: [PATCH 09/35] Attach invoice to mail --- .../Controllers/Admin/PaymentController.php | 15 +++++------ app/Notifications/InvoiceNotification.php | 26 ++++++++++++++----- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/app/Http/Controllers/Admin/PaymentController.php b/app/Http/Controllers/Admin/PaymentController.php index 71d08969..cbed821c 100644 --- a/app/Http/Controllers/Admin/PaymentController.php +++ b/app/Http/Controllers/Admin/PaymentController.php @@ -7,9 +7,7 @@ use App\Http\Controllers\Controller; use App\Models\Configuration; use App\Models\Payment; use App\Models\PaypalProduct; -use App\Models\Product; use App\Models\User; -use App\Notifications\ConfirmPaymentNotification; use App\Notifications\InvoiceNotification; use Exception; use Illuminate\Contracts\Foundation\Application; @@ -192,8 +190,6 @@ class PaymentController extends Controller 'payer' => json_encode($response->result->payer), ]); - //payment notification - $user->notify(new ConfirmPaymentNotification($payment)); event(new UserUpdateCreditsEvent($user)); @@ -237,22 +233,25 @@ class PaymentController extends Controller ->delimiter("-") ->sequence($newInvoiceID) ->serialNumberFormat(env("INVOICE_PREFIX","INV").'{DELIMITER}{SERIES}{SEQUENCE}') - ->logo(public_path('vendor/invoices/logo.png')); //Save the invoice in "storage\app\invoice\USER_ID\YEAR" + $invoice->filename=$invoice->getSerialNumber().'.pdf'; $invoice->render(); Storage::disk("local")->put("invoice/".$user->id."/".now()->format('Y')."/".$invoice->filename, $invoice->output); - // $user->notify(new InvoiceNotification($invoice)); \App\Models\invoice::create([ 'invoice_user' => $user->id, - 'invoice_name' => "invoice_".$invoice->series.$invoice->delimiter.$invoice->sequence, + 'invoice_name' => $invoice->getSerialNumber(), 'payment_id' => $payment->payment_id, ]); + + //Send Invoice per Mail + $user->notify(new InvoiceNotification($invoice,$user, $payment)); + //redirect back to home - return redirect()->route('home')->with('success', 'Your credit balance has been increased! Find the invoice in your Notifications'); + return redirect()->route('home')->with('success', 'Your credit balance has been increased!'); } diff --git a/app/Notifications/InvoiceNotification.php b/app/Notifications/InvoiceNotification.php index 3a3acbde..c905c26a 100644 --- a/app/Notifications/InvoiceNotification.php +++ b/app/Notifications/InvoiceNotification.php @@ -2,10 +2,11 @@ namespace App\Notifications; -use App\Models\Server; +use App\Models\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; +use App\Models\Payment; use LaravelDaily\Invoices\Invoice; class InvoiceNotification extends Notification @@ -14,17 +15,23 @@ class InvoiceNotification extends Notification use Queueable; /** * @var invoice + * * @var invoice + * * @var invoice */ private $invoice; + private $user; + private $payment; /** * Create a new notification instance. * * @param Invoice $invoice */ - public function __construct(Invoice $invoice) + public function __construct(Invoice $invoice, User $user, Payment $payment) { $this->invoice = $invoice; + $this->user = $user; + $this->payment = $payment; } /** @@ -47,10 +54,15 @@ class InvoiceNotification extends Notification public function toMail($notifiable) { return (new MailMessage) - ->subject('Your Invoice!') - ->greeting('Your invoice is ready') - ->line("Skurr skurr.") - ->line('damn son.') - ->attach($this->invoice->stream()); + ->subject('Your Payment was successful!') + ->greeting('Hello,') + ->line("Your payment was processes!.") + ->line('Status: '.$this->payment->status) + ->line('Price: '.$this->payment->formatToCurrency($this->payment->total_price)) + ->line('Type: '.$this->payment->type) + ->line('Amount: '.$this->payment->amount) + ->line('Balance: '.$this->user->credits) + ->line('User ID: '.$this->payment->user_id) + ->attach(storage_path('app/invoice/'.$this->user->id.'/'.now()->format('Y').'/'.$this->invoice->filename)); } } From ef3cc1e756781069d0178e3b80629f313de75dfb Mon Sep 17 00:00:00 2001 From: 1day2die Date: Tue, 30 Nov 2021 18:40:56 +0100 Subject: [PATCH 10/35] prepare the UI --- .../Controllers/Admin/PaymentController.php | 51 ++++---- .../Controllers/Admin/SettingsController.php | 11 ++ app/Notifications/InvoiceNotification.php | 17 +-- .../views/admin/settings/index.blade.php | 109 +++++++++++++++++- routes/web.php | 1 + 5 files changed, 152 insertions(+), 37 deletions(-) diff --git a/app/Http/Controllers/Admin/PaymentController.php b/app/Http/Controllers/Admin/PaymentController.php index cbed821c..aac2cc4a 100644 --- a/app/Http/Controllers/Admin/PaymentController.php +++ b/app/Http/Controllers/Admin/PaymentController.php @@ -18,16 +18,16 @@ use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Storage; +use LaravelDaily\Invoices\Classes\Buyer; +use LaravelDaily\Invoices\Classes\InvoiceItem; use LaravelDaily\Invoices\Classes\Party; +use LaravelDaily\Invoices\Invoice; use PayPalCheckoutSdk\Core\PayPalHttpClient; use PayPalCheckoutSdk\Core\ProductionEnvironment; use PayPalCheckoutSdk\Core\SandboxEnvironment; use PayPalCheckoutSdk\Orders\OrdersCaptureRequest; use PayPalCheckoutSdk\Orders\OrdersCreateRequest; use PayPalHttp\HttpException; -use LaravelDaily\Invoices\Invoice; -use LaravelDaily\Invoices\Classes\Buyer; -use LaravelDaily\Invoices\Classes\InvoiceItem; class PaymentController extends Controller { @@ -50,10 +50,10 @@ class PaymentController extends Controller public function checkOut(Request $request, PaypalProduct $paypalProduct) { return view('store.checkout')->with([ - 'product' => $paypalProduct, - 'taxvalue' => $paypalProduct->getTaxValue(), - 'taxpercent' => $paypalProduct->getTaxPercent(), - 'total' => $paypalProduct->getTotalPrice() + 'product' => $paypalProduct, + 'taxvalue' => $paypalProduct->getTaxValue(), + 'taxpercent' => $paypalProduct->getTaxPercent(), + 'total' => $paypalProduct->getTotalPrice() ]); } @@ -72,12 +72,12 @@ class PaymentController extends Controller [ "reference_id" => uniqid(), "description" => $paypalProduct->description, - "amount" => [ - "value" => $paypalProduct->getTotalPrice(), + "amount" => [ + "value" => $paypalProduct->getTotalPrice(), 'currency_code' => strtoupper($paypalProduct->currency_code), - 'breakdown' =>[ + 'breakdown' => [ 'item_total' => - [ + [ 'currency_code' => strtoupper($paypalProduct->currency_code), 'value' => $paypalProduct->price, ], @@ -93,8 +93,8 @@ class PaymentController extends Controller "application_context" => [ "cancel_url" => route('payment.cancel'), "return_url" => route('payment.success', ['product' => $paypalProduct->id]), - 'brand_name' => config('app.name', 'Laravel'), - 'shipping_preference' => 'NO_SHIPPING' + 'brand_name' => config('app.name', 'Laravel'), + 'shipping_preference' => 'NO_SHIPPING' ] @@ -194,25 +194,23 @@ class PaymentController extends Controller event(new UserUpdateCreditsEvent($user)); //create invoice - $lastInvoiceID = \App\Models\invoice::where("invoice_name","like","%".now()->format('mY')."%")->max("id"); + $lastInvoiceID = \App\Models\invoice::where("invoice_name", "like", "%" . now()->format('mY') . "%")->max("id"); $newInvoiceID = $lastInvoiceID + 1; $seller = new Party([ - 'name' => env("APP_NAME", "Controlpanel.gg"), - 'phone' => env("COMPANY_PHONE",""), - 'address' => env("COMPANY_ADRESS",""), - 'vat' => env("COMPANY_VAT_ID",""), + 'name' => env("APP_NAME", "Controlpanel.gg"), + 'phone' => env("COMPANY_PHONE", ""), + 'address' => env("COMPANY_ADRESS", ""), + 'vat' => env("COMPANY_VAT_ID", ""), 'custom_fields' => [ 'E-Mail' => env("MAIL_FROM_ADDRESS", "company@mail.com"), - "Web" => env("APP_URL","https://controlpanel.gg") + "Web" => env("APP_URL", "https://controlpanel.gg") ], ]); - - $customer = new Buyer([ - 'name' => $user->name, + 'name' => $user->name, 'custom_fields' => [ 'E-Mail' => $user->email, 'Client ID' => $user->id, @@ -228,17 +226,16 @@ class PaymentController extends Controller ->shipping(0) ->addItem($item) ->status(__('invoices::invoice.paid')) - ->series(now()->format('mY')) ->delimiter("-") ->sequence($newInvoiceID) - ->serialNumberFormat(env("INVOICE_PREFIX","INV").'{DELIMITER}{SERIES}{SEQUENCE}') + ->serialNumberFormat(env("INVOICE_PREFIX", "INV") . '{DELIMITER}{SERIES}{SEQUENCE}') ->logo(public_path('vendor/invoices/logo.png')); //Save the invoice in "storage\app\invoice\USER_ID\YEAR" - $invoice->filename=$invoice->getSerialNumber().'.pdf'; + $invoice->filename = $invoice->getSerialNumber() . '.pdf'; $invoice->render(); - Storage::disk("local")->put("invoice/".$user->id."/".now()->format('Y')."/".$invoice->filename, $invoice->output); + Storage::disk("local")->put("invoice/" . $user->id . "/" . now()->format('Y') . "/" . $invoice->filename, $invoice->output); \App\Models\invoice::create([ @@ -248,7 +245,7 @@ class PaymentController extends Controller ]); //Send Invoice per Mail - $user->notify(new InvoiceNotification($invoice,$user, $payment)); + $user->notify(new InvoiceNotification($invoice, $user, $payment)); //redirect back to home return redirect()->route('home')->with('success', 'Your credit balance has been increased!'); diff --git a/app/Http/Controllers/Admin/SettingsController.php b/app/Http/Controllers/Admin/SettingsController.php index 375c5c0c..5292ba4b 100644 --- a/app/Http/Controllers/Admin/SettingsController.php +++ b/app/Http/Controllers/Admin/SettingsController.php @@ -39,4 +39,15 @@ class SettingsController extends Controller return redirect()->route('admin.settings.index')->with('success', 'Icons updated!'); } + public function updateInvoiceSettings(Request $request) + { + $request->validate([ + 'icon' => 'nullable', + 'favicon' => 'nullable', + ]); + + + return redirect()->route('admin.settings.index')->with('success', 'Invoice settings updated!'); + } + } diff --git a/app/Notifications/InvoiceNotification.php b/app/Notifications/InvoiceNotification.php index c905c26a..78408ae2 100644 --- a/app/Notifications/InvoiceNotification.php +++ b/app/Notifications/InvoiceNotification.php @@ -2,17 +2,18 @@ namespace App\Notifications; +use App\Models\Payment; use App\Models\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; -use App\Models\Payment; use LaravelDaily\Invoices\Invoice; class InvoiceNotification extends Notification { use Queueable; + /** * @var invoice * * @var invoice @@ -57,12 +58,12 @@ class InvoiceNotification extends Notification ->subject('Your Payment was successful!') ->greeting('Hello,') ->line("Your payment was processes!.") - ->line('Status: '.$this->payment->status) - ->line('Price: '.$this->payment->formatToCurrency($this->payment->total_price)) - ->line('Type: '.$this->payment->type) - ->line('Amount: '.$this->payment->amount) - ->line('Balance: '.$this->user->credits) - ->line('User ID: '.$this->payment->user_id) - ->attach(storage_path('app/invoice/'.$this->user->id.'/'.now()->format('Y').'/'.$this->invoice->filename)); + ->line('Status: ' . $this->payment->status) + ->line('Price: ' . $this->payment->formatToCurrency($this->payment->total_price)) + ->line('Type: ' . $this->payment->type) + ->line('Amount: ' . $this->payment->amount) + ->line('Balance: ' . $this->user->credits) + ->line('User ID: ' . $this->payment->user_id) + ->attach(storage_path('app/invoice/' . $this->user->id . '/' . now()->format('Y') . '/' . $this->invoice->filename)); } } diff --git a/resources/views/admin/settings/index.blade.php b/resources/views/admin/settings/index.blade.php index 55a0150f..683d9e95 100644 --- a/resources/views/admin/settings/index.blade.php +++ b/resources/views/admin/settings/index.blade.php @@ -39,6 +39,9 @@ + @@ -88,14 +91,116 @@ chrome hotkey) to reload without cache to see your changes appear :)

- +
+
+ @csrf + @method('PATCH') + +
+
+ +
+
+ + +
+ @error('company-phone') + + {{$message}} + + @enderror +
+ +
+
+ + +
+ @error('company-name') + + {{$message}} + + @enderror +
+ +
+
+ + +
+ @error('company-vat') + + {{$message}} + + @enderror +
+ + +
+
+ + +
+ @error('company-adress') + + {{$message}} + + @enderror +
+ +
+
+ + +
+ @error('company-mail') + + {{$message}} + + @enderror +
+ +
+
+ + +
+ @error('company-web') + + {{$message}} + + @enderror +
+ +
+
+ + +
+ + +
+ - + diff --git a/routes/web.php b/routes/web.php index 18cadf8d..6def19e0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -123,6 +123,7 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () { Route::resource('configurations', ConfigurationController::class); Route::patch('settings/update/icons', [SettingsController::class, 'updateIcons'])->name('settings.update.icons'); + Route::patch('settings/update/invoice-settings', [SettingsController::class, 'updateInvoiceSettings'])->name('settings.update.invoicesettings'); Route::resource('settings', SettingsController::class)->only('index'); Route::get('usefullinks/datatable', [UsefulLinkController::class, 'datatable'])->name('usefullinks.datatable'); From a11a9cf99ced866cfabf8e0f01d227f094b76d9c Mon Sep 17 00:00:00 2001 From: 1day2die Date: Tue, 30 Nov 2021 18:54:01 +0100 Subject: [PATCH 11/35] garkein bock mehr alter --- .../Controllers/Admin/SettingsController.php | 3 + app/Models/InvoiceSettings.php | 21 +++++ .../2021_11_30_174439_invoice-settings.php | 37 +++++++++ .../views/admin/settings/index.blade.php | 76 ++++++++++++------- 4 files changed, 109 insertions(+), 28 deletions(-) create mode 100644 app/Models/InvoiceSettings.php create mode 100644 database/migrations/2021_11_30_174439_invoice-settings.php diff --git a/app/Http/Controllers/Admin/SettingsController.php b/app/Http/Controllers/Admin/SettingsController.php index 5292ba4b..c4cdc38d 100644 --- a/app/Http/Controllers/Admin/SettingsController.php +++ b/app/Http/Controllers/Admin/SettingsController.php @@ -8,6 +8,7 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; use Illuminate\Http\Request; use Illuminate\Http\Response; +use App\Models\invoiceSettings; class SettingsController extends Controller { @@ -47,6 +48,8 @@ class SettingsController extends Controller ]); + + return redirect()->route('admin.settings.index')->with('success', 'Invoice settings updated!'); } diff --git a/app/Models/InvoiceSettings.php b/app/Models/InvoiceSettings.php new file mode 100644 index 00000000..c866c0d7 --- /dev/null +++ b/app/Models/InvoiceSettings.php @@ -0,0 +1,21 @@ +id(); + $table->string('company_name')->nullable(); + $table->string('company_adress')->nullable(); + $table->string('company_phone')->nullable(); + $table->string('company_vat')->nullable(); + $table->string('company_mail')->nullable(); + $table->string('company_web')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('invoice_settings'); + } +} diff --git a/resources/views/admin/settings/index.blade.php b/resources/views/admin/settings/index.blade.php index 683d9e95..aab220e6 100644 --- a/resources/views/admin/settings/index.blade.php +++ b/resources/views/admin/settings/index.blade.php @@ -100,6 +100,34 @@
+ +
+
+ + +
+ @error('company-name') + + {{$message}} + + @enderror +
+ +
+
+ + +
+ @error('company-adress') + + {{$message}} + + @enderror +
@@ -114,20 +142,7 @@ @enderror
- -
-
- - -
- @error('company-name') - - {{$message}} - - @enderror -
+
@@ -143,20 +158,6 @@ @enderror
- -
-
- - -
- @error('company-adress') - - {{$message}} - - @enderror -
@@ -186,6 +187,25 @@ @enderror
+ +
+
+ + +
+ @error('logo') + + {{$message}} + + @enderror +
+
+
+ + +
From 7f4503d228429f295f586c97806d7daaed9e8535 Mon Sep 17 00:00:00 2001 From: WBLKLeipe Date: Wed, 1 Dec 2021 12:19:06 +0100 Subject: [PATCH 12/35] invoice settings via DB and changeable --- .../Controllers/Admin/PaymentController.php | 20 ++++++++------ .../Controllers/Admin/SettingsController.php | 26 ++++++++++++++++-- .../ConfirmPaymentNotification.php | 3 ++ database/seeders/DatabaseSeeder.php | 1 + public/vendor/invoices/logo.png | Bin 21607 -> 0 bytes .../views/admin/settings/index.blade.php | 4 +-- 6 files changed, 41 insertions(+), 13 deletions(-) delete mode 100644 public/vendor/invoices/logo.png diff --git a/app/Http/Controllers/Admin/PaymentController.php b/app/Http/Controllers/Admin/PaymentController.php index aac2cc4a..2f2d44ea 100644 --- a/app/Http/Controllers/Admin/PaymentController.php +++ b/app/Http/Controllers/Admin/PaymentController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Admin; use App\Events\UserUpdateCreditsEvent; use App\Http\Controllers\Controller; use App\Models\Configuration; +use App\Models\invoiceSettings; use App\Models\Payment; use App\Models\PaypalProduct; use App\Models\User; @@ -194,17 +195,18 @@ class PaymentController extends Controller event(new UserUpdateCreditsEvent($user)); //create invoice - $lastInvoiceID = \App\Models\invoice::where("invoice_name", "like", "%" . now()->format('mY') . "%")->max("id"); + $lastInvoiceID = \App\Models\invoice::where("invoice_name", "like", "%" . now()->format('mY') . "%")->count("id"); $newInvoiceID = $lastInvoiceID + 1; + $invoiceSettings = invoiceSettings::all()->first(); $seller = new Party([ - 'name' => env("APP_NAME", "Controlpanel.gg"), - 'phone' => env("COMPANY_PHONE", ""), - 'address' => env("COMPANY_ADRESS", ""), - 'vat' => env("COMPANY_VAT_ID", ""), + 'name' => $invoiceSettings->company_name, + 'phone' => $invoiceSettings->company_phone, + 'address' => $invoiceSettings->company_adress, + 'vat' => $invoiceSettings->company_vat, 'custom_fields' => [ - 'E-Mail' => env("MAIL_FROM_ADDRESS", "company@mail.com"), - "Web" => env("APP_URL", "https://controlpanel.gg") + 'E-Mail' => $invoiceSettings->company_mail, + "Web" => $invoiceSettings->company_web ], ]); @@ -230,7 +232,7 @@ class PaymentController extends Controller ->delimiter("-") ->sequence($newInvoiceID) ->serialNumberFormat(env("INVOICE_PREFIX", "INV") . '{DELIMITER}{SERIES}{SEQUENCE}') - ->logo(public_path('vendor/invoices/logo.png')); + ->logo(storage_path('app/public/logo.png')); //Save the invoice in "storage\app\invoice\USER_ID\YEAR" $invoice->filename = $invoice->getSerialNumber() . '.pdf'; @@ -245,7 +247,7 @@ class PaymentController extends Controller ]); //Send Invoice per Mail - $user->notify(new InvoiceNotification($invoice, $user, $payment)); + //$user->notify(new InvoiceNotification($invoice, $user, $payment)); //redirect back to home return redirect()->route('home')->with('success', 'Your credit balance has been increased!'); diff --git a/app/Http/Controllers/Admin/SettingsController.php b/app/Http/Controllers/Admin/SettingsController.php index c4cdc38d..625a1051 100644 --- a/app/Http/Controllers/Admin/SettingsController.php +++ b/app/Http/Controllers/Admin/SettingsController.php @@ -43,12 +43,34 @@ class SettingsController extends Controller public function updateInvoiceSettings(Request $request) { $request->validate([ - 'icon' => 'nullable', - 'favicon' => 'nullable', + 'logo' => 'nullable|max:10000|mimes:jpg,png,jpeg', ]); + if($request->filled('company-name')) { + invoiceSettings::updateOrCreate(['id' => "1"],['company_name' => $request->get('company-name')]); + } + if($request->filled('company-adress')) { + invoiceSettings::updateOrCreate(['id' => "1",],['company_adress' => $request->get('company-adress')]); + } + if($request->filled('company-phone')) { + invoiceSettings::updateOrCreate(['id' => "1",],['company_phone' => $request->get('company-phone')]); + } + if($request->filled('company-vat')) { + invoiceSettings::updateOrCreate(['id' => "1",],['company_vat' => $request->get('company-vat')]); + } + if($request->filled('company-mail')) { + invoiceSettings::updateOrCreate(['id' => "1",],['company_mail' => $request->get('company-mail')]); + } + if($request->filled('company-web')) { + invoiceSettings::updateOrCreate(['id' => "1",],['company_web' => $request->get('company-web')]); + } + if ($request->hasFile('logo')) { + $request->file('logo')->storeAs('public', 'logo.png'); + } + + return redirect()->route('admin.settings.index')->with('success', 'Invoice settings updated!'); } diff --git a/app/Notifications/ConfirmPaymentNotification.php b/app/Notifications/ConfirmPaymentNotification.php index efd133ab..427af6ed 100644 --- a/app/Notifications/ConfirmPaymentNotification.php +++ b/app/Notifications/ConfirmPaymentNotification.php @@ -10,6 +10,9 @@ use Illuminate\Notifications\Notification; class ConfirmPaymentNotification extends Notification implements ShouldQueue { + + //THIS IS BASICALLY NOT USED ANYMORE WITH INVOICENOTIFICATION IN PLACE + use Queueable; private Payment $payment; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 3e532616..f275ede7 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -3,6 +3,7 @@ namespace Database\Seeders; use Database\Seeders\Seeds\ConfigurationSeeder; +use Database\Seeders\Seeds\InvoiceSettingsSeeder; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder diff --git a/public/vendor/invoices/logo.png b/public/vendor/invoices/logo.png deleted file mode 100644 index f2afb9c38ead1439021eafd140119f5be25127fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21607 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 C&QV+d diff --git a/resources/views/admin/settings/index.blade.php b/resources/views/admin/settings/index.blade.php index aab220e6..ce2bbc59 100644 --- a/resources/views/admin/settings/index.blade.php +++ b/resources/views/admin/settings/index.blade.php @@ -203,13 +203,13 @@
- + - + From a2ab45d28cca65c8982394e5f24f3a85eab3714e Mon Sep 17 00:00:00 2001 From: WBLKLeipe Date: Wed, 1 Dec 2021 12:27:49 +0100 Subject: [PATCH 13/35] fix .env.example and migration --- .env.example | 6 ------ ...gs.php => 2021_12_1_174440_invoice-settings.php} | 13 ++++++++++++- 2 files changed, 12 insertions(+), 7 deletions(-) rename database/migrations/{2021_11_30_174439_invoice-settings.php => 2021_12_1_174440_invoice-settings.php} (67%) diff --git a/.env.example b/.env.example index 3820a0f6..c7016a83 100644 --- a/.env.example +++ b/.env.example @@ -23,12 +23,6 @@ PAYPAL_SECRET= PAYPAL_CLIENT_ID= PAYPAL_EMAIL= -#INVOICE RELATED - put every value in quotes "" -COMPANY_PHONE= -COMPANY_ADRESS= -COMPANY_VAT_ID= -INVOICE_PREFIX="INV" - #set-up for extra discord verification DISCORD_CLIENT_ID= DISCORD_CLIENT_SECRET= diff --git a/database/migrations/2021_11_30_174439_invoice-settings.php b/database/migrations/2021_12_1_174440_invoice-settings.php similarity index 67% rename from database/migrations/2021_11_30_174439_invoice-settings.php rename to database/migrations/2021_12_1_174440_invoice-settings.php index c8eb057e..8615d59b 100644 --- a/database/migrations/2021_11_30_174439_invoice-settings.php +++ b/database/migrations/2021_12_1_174440_invoice-settings.php @@ -2,6 +2,7 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; class InvoiceSettings extends Migration @@ -20,9 +21,19 @@ class InvoiceSettings extends Migration $table->string('company_phone')->nullable(); $table->string('company_vat')->nullable(); $table->string('company_mail')->nullable(); - $table->string('company_web')->nullable(); + $table->string('company_web')->nullable()->default(env("APP_URL","")); + $table->string('invoice_prefix')->nullable(); $table->timestamps(); }); + + DB::table('invoice_settings')->insert( + array( + 'company_name' => env("APP_NAME","MyCompany"), + 'company_web' => env("APP_URL",""), + 'invoice_prefix' => "INV" + + ) + ); } /** From 5802dee9d2e30874586656a3323cca5818ab0689 Mon Sep 17 00:00:00 2001 From: WBLKLeipe Date: Wed, 1 Dec 2021 12:30:32 +0100 Subject: [PATCH 14/35] Fix Logo upload --- storage/app/public/.gitignore | 1 + storage/app/public/logo.png | Bin 0 -> 21607 bytes 2 files changed, 1 insertion(+) create mode 100644 storage/app/public/logo.png diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore index d6b7ef32..2a984bb3 100755 --- a/storage/app/public/.gitignore +++ b/storage/app/public/.gitignore @@ -1,2 +1,3 @@ * !.gitignore +!logo.png \ No newline at end of file diff --git a/storage/app/public/logo.png b/storage/app/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f2afb9c38ead1439021eafd140119f5be25127fd GIT binary patch literal 21607 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 C&QV+d literal 0 HcmV?d00001 From afd2e2eb21209a6feaea2843a05d3519474e6b14 Mon Sep 17 00:00:00 2001 From: WBLKLeipe Date: Wed, 1 Dec 2021 12:32:46 +0100 Subject: [PATCH 15/35] re-enable email notifications --- app/Http/Controllers/Admin/PaymentController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Admin/PaymentController.php b/app/Http/Controllers/Admin/PaymentController.php index 2f2d44ea..fa181daf 100644 --- a/app/Http/Controllers/Admin/PaymentController.php +++ b/app/Http/Controllers/Admin/PaymentController.php @@ -247,7 +247,7 @@ class PaymentController extends Controller ]); //Send Invoice per Mail - //$user->notify(new InvoiceNotification($invoice, $user, $payment)); + $user->notify(new InvoiceNotification($invoice, $user, $payment)); //redirect back to home return redirect()->route('home')->with('success', 'Your credit balance has been increased!'); From f62583a007e182811b102b9c3574683bf7d04a3a Mon Sep 17 00:00:00 2001 From: WBLKLeipe Date: Wed, 1 Dec 2021 13:30:40 +0100 Subject: [PATCH 16/35] clean UI --- .../Controllers/Admin/SettingsController.php | 38 +++--- app/Models/InvoiceSettings.php | 1 + .../views/admin/settings/index.blade.php | 113 +++++++----------- 3 files changed, 60 insertions(+), 92 deletions(-) diff --git a/app/Http/Controllers/Admin/SettingsController.php b/app/Http/Controllers/Admin/SettingsController.php index 625a1051..a38dec4f 100644 --- a/app/Http/Controllers/Admin/SettingsController.php +++ b/app/Http/Controllers/Admin/SettingsController.php @@ -3,12 +3,12 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; +use App\Models\invoiceSettings; use Illuminate\Contracts\Foundation\Application; use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; use Illuminate\Http\Request; use Illuminate\Http\Response; -use App\Models\invoiceSettings; class SettingsController extends Controller { @@ -19,7 +19,15 @@ class SettingsController extends Controller */ public function index() { - return view('admin.settings.index'); + return view('admin.settings.index', + [ + 'company_name' => invoiceSettings::get()->first()->company_name, + 'company_adress' => invoiceSettings::get()->first()->company_adress, + 'company_phone' => invoiceSettings::get()->first()->company_phone, + 'company_vat' => invoiceSettings::get()->first()->company_vat, + 'company_mail' => invoiceSettings::get()->first()->company_mail, + 'company_web' => invoiceSettings::get()->first()->company_web + ]); } public function updateIcons(Request $request) @@ -46,32 +54,18 @@ class SettingsController extends Controller 'logo' => 'nullable|max:10000|mimes:jpg,png,jpeg', ]); + invoiceSettings::updateOrCreate(['id' => "1"], ['company_name' => $request->get('company-name')]); + invoiceSettings::updateOrCreate(['id' => "1",], ['company_adress' => $request->get('company-adress')]); + invoiceSettings::updateOrCreate(['id' => "1",], ['company_phone' => $request->get('company-phone')]); + invoiceSettings::updateOrCreate(['id' => "1",], ['company_mail' => $request->get('company-email')]); + invoiceSettings::updateOrCreate(['id' => "1",], ['company_vat' => $request->get('company-vat')]); + invoiceSettings::updateOrCreate(['id' => "1",], ['company_web' => $request->get('company-web')]); - - if($request->filled('company-name')) { - invoiceSettings::updateOrCreate(['id' => "1"],['company_name' => $request->get('company-name')]); - } - if($request->filled('company-adress')) { - invoiceSettings::updateOrCreate(['id' => "1",],['company_adress' => $request->get('company-adress')]); - } - if($request->filled('company-phone')) { - invoiceSettings::updateOrCreate(['id' => "1",],['company_phone' => $request->get('company-phone')]); - } - if($request->filled('company-vat')) { - invoiceSettings::updateOrCreate(['id' => "1",],['company_vat' => $request->get('company-vat')]); - } - if($request->filled('company-mail')) { - invoiceSettings::updateOrCreate(['id' => "1",],['company_mail' => $request->get('company-mail')]); - } - if($request->filled('company-web')) { - invoiceSettings::updateOrCreate(['id' => "1",],['company_web' => $request->get('company-web')]); - } if ($request->hasFile('logo')) { $request->file('logo')->storeAs('public', 'logo.png'); } - return redirect()->route('admin.settings.index')->with('success', 'Invoice settings updated!'); } diff --git a/app/Models/InvoiceSettings.php b/app/Models/InvoiceSettings.php index c866c0d7..5bcaf3dc 100644 --- a/app/Models/InvoiceSettings.php +++ b/app/Models/InvoiceSettings.php @@ -15,6 +15,7 @@ class invoiceSettings extends Model 'company_name', 'company_adress', 'company_phone', + 'company_mail', 'company_vat', 'company_web' ]; diff --git a/resources/views/admin/settings/index.blade.php b/resources/views/admin/settings/index.blade.php index ce2bbc59..c2414bb3 100644 --- a/resources/views/admin/settings/index.blade.php +++ b/resources/views/admin/settings/index.blade.php @@ -92,7 +92,7 @@ -
+
@csrf @@ -102,89 +102,63 @@
-
- - +
+ +
- @error('company-name') - - {{$message}} - - @enderror
-
- - +
+ +
- @error('company-adress') - - {{$message}} - - @enderror
-
- - +
+ +
- @error('company-phone') - - {{$message}} - - @enderror
-
- - +
+ +
- @error('company-vat') - - {{$message}} - - @enderror
-
- - +
+ +
- @error('company-mail') - - {{$message}} - - @enderror
-
- - +
+ +
- @error('company-web') - - {{$message}} - - @enderror
@@ -204,21 +178,20 @@
- - -
-
- - - - +
+ + + +
+
+ @@ -228,7 +201,7 @@ + + From 9d812b77ee0bfeb4d92fab384d0b4618e4dcbf4f Mon Sep 17 00:00:00 2001 From: 1day2die Date: Tue, 14 Dec 2021 16:48:00 +0100 Subject: [PATCH 35/35] fix cent bug --- app/Models/PaypalProduct.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Models/PaypalProduct.php b/app/Models/PaypalProduct.php index 2463bf00..67220c77 100644 --- a/app/Models/PaypalProduct.php +++ b/app/Models/PaypalProduct.php @@ -43,7 +43,7 @@ class PaypalProduct extends Model /** * @param mixed $value * @param string $locale - * + * * @return float */ public function formatToCurrency($value,$locale = 'en_US') @@ -70,7 +70,7 @@ class PaypalProduct extends Model */ public function getTaxValue() { - return $this->price*$this->getTaxPercent()/100; + return number_format($this->price*$this->getTaxPercent()/100,2); } /** @@ -78,8 +78,8 @@ class PaypalProduct extends Model * * @return float */ - public function getTotalPrice() + public function getTotalPrice() { - return $this->price+($this->getTaxValue()); + return number_format($this->price+$this->getTaxValue(),2); } }