У меня есть 2 корабля отношений в Laravel для Products
, это Price
и User
. У каждого User
много Product
, а у каждого Product
много User
и Price
. Вот список клиентов:
<select name="client" id="client" class="form-control client">
<option value="">-- Zgjidh Klientin --</option>
@foreach ($clients as $client)
<option data-preferencial ="{{ $client->preferencial }}" value="{{ $client->id }}" class = "user klient">{{ $client->name }}</option>
@endforeach
</select>
Мои отношения работают нормально. Я получаю Продукты Пользователя с объектами pivot
и prices
. Я прохожу через них oop и получаю массив prices
. Вот код моей таблицы:
<table class="table table-bordered" id="products_table">
<tbody>
<tr>
<td>
<select name="products[]" id="products" class="form-control products">
<option value="">Choose product</option>
@foreach ($products as $product)
<option data-price="{{ $product->sell_price }}" value="{{ $product->id }}" class = "product">{{ $product->name }} (USD {{ number_format($product->sell_price, 2) }})</option>
@endforeach
</select>
</td>
<td>
<input type="number" id="quantity" name="quantities[]" class="form-control qty" value="1" />
</td>
<td>
<input type="text" id="prices" name="prices[]" class="form-control prices" value="" step="0.00" min="0" readonly />
</td>
<td><input type="number" name='total[]' placeholder='0.00' class="form-control total" readonly /></td>
<td>
<button type="button" class="d-none btn btn-danger btn-sm" onclick="deleteRow(this)"><i class="fas fa-times"></i></button>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<th colspan="4" class="text-right" id="total_price">0.00</th>
<input type="hidden" class="total_invoice" name="total_invoice" value="" />
</tr>
</tfoot>
</table>
И вот мой Javascript взаимодействует с таблицей:
var id = [];
var min = [];
var max = [];
var prefPrice = [];
$(document).on('change', '.client', function () {
var clients = $('option:selected', this).data("preferencial");
if (clients === 1) {
for(var i=0; i<products.length; i++){
var prods = products[i].prices;
for(var p=0; p<prods.length; p++){
cmimet.push([prods[p].product_id, prods[p].min, prods[p].max, prods[p].price]);
}
}
cmimet.filter(function(entry) {
id = entry[0];
min = entry[1];
max = entry[2];
prefPrice = entry[3];
mix.push({id:entry[0], min:entry[1], max:entry[2], prefPrice:[entry[3]]});
});
}
});
У меня проблема с атрибутом цены, поскольку я не возможность передать его для расчета на основе продукта id
.
function calc2($tr)
{
var prodId = $tr.find("td:nth-child(1) select option:selected").val();
var price = $tr.find("td:nth-child(1) select option:selected").data("price");
var size = $tr.find("td:nth-child(2) input").val();
var all =[];
for (var j=0; j<mix.length; j++) {
if (mix[j].id == prodId) {
var min = mix[j].min;
var max = mix[j].max;
var prefPrice = [mix[j].prefPrice];
all.push([min, max, prefPrice]);
}
}
var total = price * size;
$tr.find("td:nth-child(3) input").attr('value', price);
$tr.find("td:nth-child(4) input").attr('value', total);
calcTotal();
}
Как видите, я получил цену по умолчанию из таблицы Products
. Но если клиент предпочитает, у него есть цена, основанная на заказанном количестве.
Вот возврат от Controller
0:
buy_price: 200
category: "test category"
code: "GMC_0321"
created_at: "2020-05-18T18:24:52.000000Z"
id: 1
name: "test product"
dettails: "test dettails"
pivot: {user_id: 3, product_id: 1, qty: 25, created_at: "2020-05-22T11:38:46.000000Z", updated_at: "2020-05-22T11:41:54.000000Z"}
prices: Array(3)
0: {id: 1, product_id: 1, min: 1, max: 10, price: 300, …}
1: {id: 2, product_id: 1, min: 11, max: 25, price: 250, …}
2: {id: 3, product_id: 1, min: 25, max: 9999, price: 230, …}
length: 3
__proto__: Array(0)
sell_price: 300
updated_at: "2020-05-18T18:24:52.000000Z"