diff --git a/app/Http/Controllers/Api/InvoiceitemController.php b/app/Http/Controllers/Api/InvoiceitemController.php index 55820ec..bb7d1c8 100644 --- a/app/Http/Controllers/Api/InvoiceitemController.php +++ b/app/Http/Controllers/Api/InvoiceitemController.php @@ -32,7 +32,7 @@ class InvoiceitemController extends Controller 'name' => 'required|string', 'description' => 'nullable|string', 'article_number' => 'nullable|string', - + 'sort' => 'required|numeric|min:0', ]); $item = $invoice->items()->create($itemData); diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index edc52dd..cf2a9b1 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -104,7 +104,7 @@ class Invoice extends Model */ public function items(): HasMany { - return $this->hasMany(Invoiceitem::class); + return $this->hasMany(Invoiceitem::class)->orderBy('sort'); } /** diff --git a/app/Models/Invoiceitem.php b/app/Models/Invoiceitem.php index 45fd349..bcb4cc0 100644 --- a/app/Models/Invoiceitem.php +++ b/app/Models/Invoiceitem.php @@ -22,6 +22,7 @@ class Invoiceitem extends Model 'total', 'name', 'description', + 'sort' ]; } diff --git a/database/migrations/2025_08_02_095641_add_sort_to_invoiceitems.php b/database/migrations/2025_08_02_095641_add_sort_to_invoiceitems.php new file mode 100644 index 0000000..e8133ed --- /dev/null +++ b/database/migrations/2025_08_02_095641_add_sort_to_invoiceitems.php @@ -0,0 +1,28 @@ +integer('sort')->default(0)->after('invoice_id'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('invoiceitems', function (Blueprint $table) { + $table->dropColumn('sort'); + }); + } +}; diff --git a/resources/views/invoice/create.blade.php b/resources/views/invoice/create.blade.php index 395ade2..75a1aa3 100644 --- a/resources/views/invoice/create.blade.php +++ b/resources/views/invoice/create.blade.php @@ -655,6 +655,7 @@ for (let i = 0; i < self.items.length; i++) { let pos = sort_flipped[i]; let item = self.items[pos]; + item.sort = i; const result = axios.post('invoice/' + self.invoice_id + '/item', item) .catch(function (error) { self.error = true; diff --git a/resources/views/invoice/edit.blade.php b/resources/views/invoice/edit.blade.php index c0f6157..2d39654 100644 --- a/resources/views/invoice/edit.blade.php +++ b/resources/views/invoice/edit.blade.php @@ -662,6 +662,7 @@ for (let i = 0; i < self.items.length; i++) { let pos = sort_flipped[i]; let item = self.items[pos]; + item.sort = i; const result = axios.post('invoice/' + self.invoice.id + '/item', item) .catch(function (error) { self.error = true;