mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Add Product Image and Product Max Quantity to the products table
This commit is contained in:
parent
6a62b5cbfa
commit
4b9b1c3fc2
@ -322,6 +322,7 @@ class BillingPortalPurchasev2 extends Component
|
|||||||
'total' => $total,
|
'total' => $total,
|
||||||
'qty' => $qty,
|
'qty' => $qty,
|
||||||
'is_recurring' => true,
|
'is_recurring' => true,
|
||||||
|
'product_image' => $p->product_image,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,6 +39,8 @@ class Product extends BaseModel
|
|||||||
'in_stock_quantity',
|
'in_stock_quantity',
|
||||||
'stock_notification_threshold',
|
'stock_notification_threshold',
|
||||||
'stock_notification',
|
'stock_notification',
|
||||||
|
'max_quantity',
|
||||||
|
'product_image',
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $touches = [];
|
protected $touches = [];
|
||||||
|
@ -93,6 +93,8 @@ class ProductTransformer extends EntityTransformer
|
|||||||
'in_stock_quantity' => (int) $product->in_stock_quantity ?: 0,
|
'in_stock_quantity' => (int) $product->in_stock_quantity ?: 0,
|
||||||
'stock_notification' => (bool) $product->stock_notification,
|
'stock_notification' => (bool) $product->stock_notification,
|
||||||
'stock_notification_threshold' => (int) $product->stock_notification_threshold,
|
'stock_notification_threshold' => (int) $product->stock_notification_threshold,
|
||||||
|
'max_quantity' => (int) $product->max_quantity,
|
||||||
|
'product_image' => (string) $product->product_image ?: '',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('products', function (Blueprint $table){
|
||||||
|
$table->unsignedInteger("max_quantity")->nullable();
|
||||||
|
$table->string("product_image", 191)->nullable();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
};
|
@ -36,9 +36,9 @@
|
|||||||
@if(!empty($subscription->recurring_product_ids))
|
@if(!empty($subscription->recurring_product_ids))
|
||||||
@foreach($recurring_products as $index => $product)
|
@foreach($recurring_products as $index => $product)
|
||||||
<li class="flex py-6">
|
<li class="flex py-6">
|
||||||
@if(filter_var($product->custom_value1, FILTER_VALIDATE_URL))
|
@if(filter_var($product->product_image, FILTER_VALIDATE_URL))
|
||||||
<div class="h-24 w-24 flex-shrink-0 overflow-hidden rounded-md border border-gray-200 mr-2">
|
<div class="h-24 w-24 flex-shrink-0 overflow-hidden rounded-md border border-gray-200 mr-2">
|
||||||
<img src="{{$product->custom_value1}}" alt="" class="h-full w-full object-cover object-center p-2">
|
<img src="{{$product->product_image}}" alt="" class="h-full w-full object-cover object-center p-2">
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
<div class="ml-0 flex flex-1 flex-col">
|
<div class="ml-0 flex flex-1 flex-col">
|
||||||
@ -74,7 +74,7 @@
|
|||||||
@endfor
|
@endfor
|
||||||
}
|
}
|
||||||
@else
|
@else
|
||||||
@for ($i = 2; $i <= ($subscription->use_inventory_management ? min($product->in_stock_quantity, max(100,$product->custom_value2)) : max(100,$product->custom_value2)); $i++)
|
@for ($i = 2; $i <= ($subscription->use_inventory_management ? min($product->in_stock_quantity, max(100,$product->max_quantity)) : max(100,$product->max_quantity)); $i++)
|
||||||
<option value="{{$i}}">{{$i}}</option>
|
<option value="{{$i}}">{{$i}}</option>
|
||||||
@endfor
|
@endfor
|
||||||
@endif
|
@endif
|
||||||
@ -96,9 +96,9 @@
|
|||||||
@if(!empty($subscription->product_ids))
|
@if(!empty($subscription->product_ids))
|
||||||
@foreach($products as $product)
|
@foreach($products as $product)
|
||||||
<li class="flex py-6">
|
<li class="flex py-6">
|
||||||
@if(filter_var($product->custom_value1, FILTER_VALIDATE_URL))
|
@if(filter_var($product->product_image, FILTER_VALIDATE_URL))
|
||||||
<div class="h-24 w-24 flex-shrink-0 overflow-hidden rounded-md border border-gray-200 mr-2">
|
<div class="h-24 w-24 flex-shrink-0 overflow-hidden rounded-md border border-gray-200 mr-2">
|
||||||
<img src="{{$product->custom_value1}}" alt="" class="h-full w-full object-cover object-center p-2">
|
<img src="{{$product->product_image}}" alt="" class="h-full w-full object-cover object-center p-2">
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
<div class="ml-0 flex flex-1 flex-col">
|
<div class="ml-0 flex flex-1 flex-col">
|
||||||
@ -135,9 +135,9 @@
|
|||||||
@if(!empty($subscription->optional_recurring_product_ids))
|
@if(!empty($subscription->optional_recurring_product_ids))
|
||||||
@foreach($optional_recurring_products as $index => $product)
|
@foreach($optional_recurring_products as $index => $product)
|
||||||
<li class="flex py-6">
|
<li class="flex py-6">
|
||||||
@if(filter_var($product->custom_value1, FILTER_VALIDATE_URL))
|
@if(filter_var($product->product_image, FILTER_VALIDATE_URL))
|
||||||
<div class="h-24 w-24 flex-shrink-0 overflow-hidden rounded-md border border-gray-200 mr-2">
|
<div class="h-24 w-24 flex-shrink-0 overflow-hidden rounded-md border border-gray-200 mr-2">
|
||||||
<img src="{{$product->custom_value1}}" alt="" class="h-full w-full object-cover object-center p-2">
|
<img src="{{$product->product_image}}" alt="" class="h-full w-full object-cover object-center p-2">
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
<div class="ml-0 flex flex-1 flex-col">
|
<div class="ml-0 flex flex-1 flex-col">
|
||||||
@ -148,7 +148,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-between text-sm mt-1">
|
<div class="flex justify-between text-sm mt-1">
|
||||||
@if(is_numeric($product->custom_value2))
|
@if(is_numeric($product->max_quantity))
|
||||||
<p class="text-gray-500 w-3/4"></p>
|
<p class="text-gray-500 w-3/4"></p>
|
||||||
<div class="flex place-content-end">
|
<div class="flex place-content-end">
|
||||||
@if($subscription->use_inventory_management && $product->in_stock_quantity == 0)
|
@if($subscription->use_inventory_management && $product->in_stock_quantity == 0)
|
||||||
@ -162,7 +162,7 @@
|
|||||||
@endif
|
@endif
|
||||||
>
|
>
|
||||||
<option value="0" selected="selected">0</option>
|
<option value="0" selected="selected">0</option>
|
||||||
@for ($i = 1; $i <= ($subscription->use_inventory_management ? min($product->in_stock_quantity, max(100,$product->custom_value2)) : max(100,$product->custom_value2)); $i++)
|
@for ($i = 1; $i <= ($subscription->use_inventory_management ? min($product->in_stock_quantity, max(100,$product->max_quantity)) : max(100,$product->max_quantity)); $i++)
|
||||||
<option value="{{$i}}">{{$i}}</option>
|
<option value="{{$i}}">{{$i}}</option>
|
||||||
@endfor
|
@endfor
|
||||||
</select>
|
</select>
|
||||||
@ -176,9 +176,9 @@
|
|||||||
@if(!empty($subscription->optional_product_ids))
|
@if(!empty($subscription->optional_product_ids))
|
||||||
@foreach($optional_products as $index => $product)
|
@foreach($optional_products as $index => $product)
|
||||||
<li class="flex py-6">
|
<li class="flex py-6">
|
||||||
@if(filter_var($product->custom_value1, FILTER_VALIDATE_URL))
|
@if(filter_var($product->product_image, FILTER_VALIDATE_URL))
|
||||||
<div class="h-24 w-24 flex-shrink-0 overflow-hidden rounded-md border border-gray-200 mr-2">
|
<div class="h-24 w-24 flex-shrink-0 overflow-hidden rounded-md border border-gray-200 mr-2">
|
||||||
<img src="{{$product->custom_value1}}" alt="" class="h-full w-full object-cover object-center p-2">
|
<img src="{{$product->product_image}}" alt="" class="h-full w-full object-cover object-center p-2">
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
<div class="ml-0 flex flex-1 flex-col">
|
<div class="ml-0 flex flex-1 flex-col">
|
||||||
@ -190,7 +190,7 @@
|
|||||||
<p class="mt-1 text-sm text-gray-500"></p>
|
<p class="mt-1 text-sm text-gray-500"></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-between text-sm mt-1">
|
<div class="flex justify-between text-sm mt-1">
|
||||||
@if(is_numeric($product->custom_value2))
|
@if(is_numeric($product->max_quantity))
|
||||||
<p class="text-gray-500 w-3/4"></p>
|
<p class="text-gray-500 w-3/4"></p>
|
||||||
<div class="flex place-content-end">
|
<div class="flex place-content-end">
|
||||||
@if($subscription->use_inventory_management && $product->in_stock_quantity == 0)
|
@if($subscription->use_inventory_management && $product->in_stock_quantity == 0)
|
||||||
@ -200,7 +200,7 @@
|
|||||||
@endif
|
@endif
|
||||||
<select wire:model.debounce.300ms="data.{{ $index }}.optional_qty" class="rounded-md border-gray-300 shadow-sm sm:text-sm">
|
<select wire:model.debounce.300ms="data.{{ $index }}.optional_qty" class="rounded-md border-gray-300 shadow-sm sm:text-sm">
|
||||||
<option value="0" selected="selected">0</option>
|
<option value="0" selected="selected">0</option>
|
||||||
@for ($i = 1; $i <= ($subscription->use_inventory_management ? min($product->in_stock_quantity, min(100,$product->custom_value2)) : min(100,$product->custom_value2)); $i++)
|
@for ($i = 1; $i <= ($subscription->use_inventory_management ? min($product->in_stock_quantity, min(100,$product->max_quantity)) : min(100,$product->max_quantity)); $i++)
|
||||||
<option value="{{$i}}">{{$i}}</option>
|
<option value="{{$i}}">{{$i}}</option>
|
||||||
@endfor
|
@endfor
|
||||||
</select>
|
</select>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user