Subscriptions v2

This commit is contained in:
David Bomba 2022-11-23 19:32:03 +11:00
parent d2ea53b0a4
commit 5316340c29
7 changed files with 188 additions and 22 deletions

View File

@ -42,7 +42,7 @@ class S3Cleanup extends Command
*/
public function handle()
{
if (! Ninja::isHosted()) {
if (!Ninja::isHosted()) {
return;
}

48
package-lock.json generated
View File

@ -5,6 +5,8 @@
"packages": {
"": {
"dependencies": {
"@tailwindcss/forms": "^0.3.4",
"@tailwindcss/line-clamp": "^0.3.1",
"autoprefixer": "^10.3.7",
"axios": "^0.25",
"card-js": "^1.0.13",
@ -1692,6 +1694,25 @@
"tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1"
}
},
"node_modules/@tailwindcss/forms": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.3.4.tgz",
"integrity": "sha512-vlAoBifNJUkagB+PAdW4aHMe4pKmSLroH398UPgIogBFc91D2VlHUxe4pjxQhiJl0Nfw53sHSJSQBSTQBZP3vA==",
"dependencies": {
"mini-svg-data-uri": "^1.2.3"
},
"peerDependencies": {
"tailwindcss": ">=2.0.0"
}
},
"node_modules/@tailwindcss/line-clamp": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.3.1.tgz",
"integrity": "sha512-pNr0T8LAc3TUx/gxCfQZRe9NB2dPEo/cedPHzUGIPxqDMhgjwNm6jYxww4W5l0zAsAddxr+XfZcqttGiFDgrGg==",
"peerDependencies": {
"tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1"
}
},
"node_modules/@trysound/sax": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
@ -5752,6 +5773,14 @@
"url": "https://opencollective.com/webpack"
}
},
"node_modules/mini-svg-data-uri": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
"integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==",
"bin": {
"mini-svg-data-uri": "cli.js"
}
},
"node_modules/minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@ -10302,6 +10331,20 @@
"dev": true,
"requires": {}
},
"@tailwindcss/forms": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.3.4.tgz",
"integrity": "sha512-vlAoBifNJUkagB+PAdW4aHMe4pKmSLroH398UPgIogBFc91D2VlHUxe4pjxQhiJl0Nfw53sHSJSQBSTQBZP3vA==",
"requires": {
"mini-svg-data-uri": "^1.2.3"
}
},
"@tailwindcss/line-clamp": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.3.1.tgz",
"integrity": "sha512-pNr0T8LAc3TUx/gxCfQZRe9NB2dPEo/cedPHzUGIPxqDMhgjwNm6jYxww4W5l0zAsAddxr+XfZcqttGiFDgrGg==",
"requires": {}
},
"@trysound/sax": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
@ -13416,6 +13459,11 @@
}
}
},
"mini-svg-data-uri": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
"integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg=="
},
"minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",

View File

@ -16,6 +16,8 @@
"vue-template-compiler": "^2.6.14"
},
"dependencies": {
"@tailwindcss/line-clamp": "^0.3.1",
"@tailwindcss/forms": "^0.3.4",
"autoprefixer": "^10.3.7",
"axios": "^0.25",
"card-js": "^1.0.13",

2
public/css/app.css vendored

File diff suppressed because one or more lines are too long

View File

@ -42,7 +42,7 @@
"/js/clients/payments/stripe-przelewy24.js": "/js/clients/payments/stripe-przelewy24.js?id=3d53d2f7d0291d9f92cf7414dd2d351c",
"/js/clients/payments/stripe-browserpay.js": "/js/clients/payments/stripe-browserpay.js?id=db71055862995fd6ae21becfc587a3de",
"/js/clients/payments/stripe-fpx.js": "/js/clients/payments/stripe-fpx.js?id=914a6846ad1e5584635e7430fef76875",
"/css/app.css": "/css/app.css?id=134313385d8e842c1589a0c057b0a112",
"/css/app.css": "/css/app.css?id=2c1ff2517e9909ca83760beb295535be",
"/css/card-js.min.css": "/css/card-js.min.css?id=62afeb675235451543ada60afcedcb7c",
"/vendor/clipboard.min.js": "/vendor/clipboard.min.js?id=15f52a1ee547f2bdd46e56747332ca2d"
}

View File

@ -3,8 +3,8 @@
</style>
<div class="grid grid-cols-12">
<div class="col-span-12 xl:col-span-8 bg-gray-50 flex flex-col max-h-100px items-center">
<div class="col-span-12 xl:col-span-8 bg-gray-50 flex flex-col max-h-100px">
<div class="w-full p-8 md:max-w-3xl">
<img class="object-scale-down" style="max-height: 100px;"src="{{ $subscription->company->present()->logo }}" alt="{{ $subscription->company->present()->name }}">
@ -14,7 +14,135 @@
</h1>
</div>
<div class="w-full p-4 md:max-w-3xl">
@if(!empty($subscription->recurring_product_ids))
<ul role="list" class="divide-y divide-gray-200 bg-white">
@foreach($subscription->service()->recurring_products() as $product)
<li>
<a href="#" class="block hover:bg-gray-50">
<div class="px-4 py-4 sm:px-6">
<div class="flex items-center justify-between">
<p class="truncate text-sm font-medium text-gray-600">{!! ctrans('texts.recurring_purchases') !!}</p>
<div class="ml-2 flex flex-shrink-0">
<p class="inline-flex rounded-full bg-green-100 px-2 text-xs font-semibold leading-5 text-green-800"></p>
</div>
</div>
<div class="mt-2 sm:flex sm:justify-between">
<div class="sm:flex">
<p class="text-sm font-medium text-gray-900 mt-2">{!! nl2br($product->notes) !!}</p>
</div>
<div class="mt-2 flex items-center text-sm text-gray-500 sm:mt-0">
<span data-ref="price">{{ \App\Utils\Number::formatMoney($product->price, $subscription->company) }} / {{ App\Models\RecurringInvoice::frequencyForKey($subscription->frequency_id) }}</span>
</div>
</div>
</div>
</a>
</li>
@endforeach
</ul>
@endif
</div>
<div class="w-full p-4 md:max-w-3xl">
@if(!empty($subscription->product_ids))
<ul role="list" class="divide-y divide-gray-200 bg-white">
@foreach($subscription->service()->products() as $product)
<li>
<a href="#" class="block hover:bg-gray-50">
<div class="px-4 py-4 sm:px-6">
<div class="flex items-center justify-between">
<p class="truncate text-sm font-medium text-gray-600">{!! ctrans('texts.one_time_purchases') !!}</p>
<div class="ml-2 flex flex-shrink-0">
<p class="inline-flex rounded-full bg-green-100 px-2 text-xs font-semibold leading-5 text-green-800"></p>
</div>
</div>
<div class="mt-2 sm:flex sm:justify-between">
<div class="sm:flex">
<p class="text-sm font-medium text-gray-900 mt-2">{!! nl2br($product->notes) !!}</p>
</div>
<div class="mt-2 flex items-center text-sm text-gray-500 sm:mt-0">
<span data-ref="price">{{ \App\Utils\Number::formatMoney($product->price, $subscription->company) }}</span>
</div>
</div>
</div>
</a>
</li>
@endforeach
</ul>
@endif
</div>
<div class="relative mt-8">
<div class="absolute inset-0 flex items-center">
<div class="w-full border-t border-gray-300"></div>
</div>
<div class="relative flex justify-center text-sm leading-5">
<h1 class="text-2xl font-bold tracking-wide bg-gray-50 px-6 py-0">Optional products</h1>
</div>
</div>
<div class="w-full p-4 md:max-w-3xl">
@if(!empty($subscription->recurring_product_ids))
<ul role="list" class="divide-y divide-gray-200 bg-white">
@foreach($subscription->service()->recurring_products() as $product)
<li>
<a href="#" class="block hover:bg-gray-50">
<div class="px-4 py-4 sm:px-6">
<div class="flex items-center justify-between">
<p class="truncate text-sm font-medium text-gray-600">{!! ctrans('texts.recurring_purchases') !!}</p>
<div class="ml-2 flex flex-shrink-0">
<p class="inline-flex rounded-full bg-green-100 px-2 text-xs font-semibold leading-5 text-green-800"></p>
</div>
</div>
<div class="mt-2 sm:flex sm:justify-between">
<div class="sm:flex">
<p class="text-sm font-medium text-gray-900 mt-2">{!! nl2br($product->notes) !!}</p>
</div>
<div class="mt-2 flex items-center text-sm text-gray-500 sm:mt-0">
<span data-ref="price">{{ \App\Utils\Number::formatMoney($product->price, $subscription->company) }} / {{ App\Models\RecurringInvoice::frequencyForKey($subscription->frequency_id) }}</span>
</div>
</div>
</div>
</a>
</li>
@endforeach
</ul>
@endif
</div>
<div class="w-full p-4 md:max-w-3xl">
@if(!empty($subscription->product_ids))
<ul role="list" class="divide-y divide-gray-200 bg-white">
@foreach($subscription->service()->products() as $product)
<li>
<a href="#" class="block hover:bg-gray-50">
<div class="px-4 py-4 sm:px-6">
<div class="flex items-center justify-between">
<p class="truncate text-sm font-medium text-gray-600">{!! ctrans('texts.one_time_purchases') !!}</p>
<div class="ml-2 flex flex-shrink-0">
<p class="inline-flex rounded-full bg-green-100 px-2 text-xs font-semibold leading-5 text-green-800"></p>
</div>
</div>
<div class="mt-2 sm:flex sm:justify-between">
<div class="sm:flex">
<p class="text-sm font-medium text-gray-900 mt-2">{!! nl2br($product->notes) !!}</p>
</div>
<div class="mt-2 flex items-center text-sm text-gray-500 sm:mt-0">
<span data-ref="price">{{ \App\Utils\Number::formatMoney($product->price, $subscription->company) }}</span>
</div>
</div>
</div>
</a>
</li>
@endforeach
</ul>
@endif
</div>
</div>
<div class="col-span-12 xl:col-span-4 bg-blue-500 flex flex-col item-center">
<div class="w-full p-4 md:max-w-3xl">
@ -22,22 +150,6 @@
</div>
</div>
</div>
<div class="grid grid-cols-12 border-4 border-gray-600">
<div class="col-span-12 xl:col-span-8 bg-gray-50 flex flex-col">
<div class="w-full p-8 md:max-w-3xl">
product block
</div>
</div>
<div class="col-span-12 xl:col-span-4 bg-blue-500 flex flex-col item-center">
<div class="w-full p-4 md:max-w-3xl">
customer form block
</div>
</div>
</div>

6
tailwind.config.js vendored
View File

@ -17,5 +17,9 @@ module.exports = {
}
},
variants: {},
plugins: []
plugins: [
require('@tailwindcss/line-clamp'),
require('@tailwindcss/forms')
]
};