diff --git a/resources/views/invoices/edit.blade.php b/resources/views/invoices/edit.blade.php index 8261e6d7ae4e..b7b6e6bf5463 100644 --- a/resources/views/invoices/edit.blade.php +++ b/resources/views/invoices/edit.blade.php @@ -858,19 +858,14 @@ @endif @if (isset($tasks) && $tasks) - // move the blank invoice line item to the end - var blank = model.invoice().invoice_items.pop(); var tasks = {!! json_encode($tasks) !!}; - for (var i=0; i - + $parent.invoice_items_{{ $isTasks ? 'with_tasks' : 'without_tasks' }}().length > 1" class="fa fa-sort">
diff --git a/resources/views/invoices/knockout.blade.php b/resources/views/invoices/knockout.blade.php index d49146e13f29..33bb56e395b3 100644 --- a/resources/views/invoices/knockout.blade.php +++ b/resources/views/invoices/knockout.blade.php @@ -166,15 +166,15 @@ function ViewModel(data) { } }); - self.hasTasksCached; + self.hasTasksCached = false; self.hasTasks = ko.computed(function() { if (self.hasTasksCached) { return true; } invoice = self.invoice(); - for (var i=0; i= {{ MAX_INVOICE_ITEMS }}) { return false; } @@ -277,7 +292,12 @@ function InvoiceModel(data) { @if ($account->hide_quantity) itemModel.qty(1); @endif - self.invoice_items.push(itemModel); + if (isTask) { + itemModel.invoice_item_type_id({{ INVOICE_ITEM_TYPE_TASK }}); + self.invoice_items_with_tasks.push(itemModel); + } else { + self.invoice_items_without_tasks.push(itemModel); + } applyComboboxListeners(); return itemModel; } @@ -329,7 +349,11 @@ function InvoiceModel(data) { }) self.removeItem = function(item) { - self.invoice_items.remove(item); + if (item.isTask()) { + self.invoice_items_with_tasks.remove(item); + } else { + self.invoice_items_without_tasks.remove(item); + } refreshPDF(true); } @@ -568,18 +592,6 @@ function InvoiceModel(data) { } self.applyInclusivTax(taxRate); } - - self.invoice_items_with_tasks = ko.computed(function() { - return ko.utils.arrayFilter(self.invoice_items(), function(item) { - return item.invoice_item_type_id() == {{ INVOICE_ITEM_TYPE_TASK }}; - }); - }); - - self.invoice_items_without_tasks = ko.computed(function() { - return ko.utils.arrayFilter(self.invoice_items(), function(item) { - return item.invoice_item_type_id() != {{ INVOICE_ITEM_TYPE_TASK }}; - }); - }); } function ClientModel(data) { @@ -769,6 +781,10 @@ function ItemModel(data) { self.invoice_item_type_id = ko.observable({{ INVOICE_ITEM_TYPE_STANDARD }}); self.actionsVisible = ko.observable(false); + self.isTask = ko.computed(function() { + return self.invoice_item_type_id() == {{ INVOICE_ITEM_TYPE_TASK }}; + }); + this.tax1 = ko.computed({ read: function () { return self.tax_rate1IsInclusive() + ' ' + self.tax_rate1() + ' ' + self.tax_name1();