mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Working on expense categories
This commit is contained in:
parent
cd9aae1e22
commit
e6b60c6f1a
@ -86,6 +86,7 @@ class ExpenseController extends BaseController
|
||||
'vendor' => $vendor,
|
||||
'clients' => Client::scope()->with('contacts')->orderBy('name')->get(),
|
||||
'clientPublicId' => $request->client_id,
|
||||
'categoryPublicId' => $request->category_id,
|
||||
];
|
||||
|
||||
$data = array_merge($data, self::getViewModel());
|
||||
@ -125,6 +126,7 @@ class ExpenseController extends BaseController
|
||||
'vendorPublicId' => $expense->vendor ? $expense->vendor->public_id : null,
|
||||
'clients' => Client::scope()->with('contacts')->orderBy('name')->get(),
|
||||
'clientPublicId' => $expense->client ? $expense->client->public_id : null,
|
||||
'categoryPublicId' => $expense->expense_category ? $expense->expense_category->public_id : null,
|
||||
];
|
||||
|
||||
$data = array_merge($data, self::getViewModel());
|
||||
@ -234,7 +236,7 @@ class ExpenseController extends BaseController
|
||||
'countries' => Cache::get('countries'),
|
||||
'customLabel1' => Auth::user()->account->custom_vendor_label1,
|
||||
'customLabel2' => Auth::user()->account->custom_vendor_label2,
|
||||
'categories' => ExpenseCategory::scope()->get()
|
||||
'categories' => ExpenseCategory::scope()->orderBy('name')->get(),
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -245,7 +245,7 @@ class InvoiceController extends BaseController
|
||||
$invoice->public_id = 0;
|
||||
|
||||
if (Session::get('expenses')) {
|
||||
$invoice->expenses = Expense::scope(Session::get('expenses'))->with('documents')->get();
|
||||
$invoice->expenses = Expense::scope(Session::get('expenses'))->with('documents', 'expense_category')->get();
|
||||
}
|
||||
|
||||
|
||||
|
@ -58,19 +58,6 @@ class ExpenseService extends BaseService
|
||||
$data['vendor_id'] = Vendor::getPrivateId($data['vendor_id']);
|
||||
}
|
||||
|
||||
if ( ! empty($data['category'])) {
|
||||
$name = trim($data['category']);
|
||||
$category = ExpenseCategory::scope()->withTrashed()->whereName($name)->first();
|
||||
if ( ! $category) {
|
||||
$category = ExpenseCategory::createNew();
|
||||
$category->name = $name;
|
||||
$category->save();
|
||||
}
|
||||
$data['expense_category_id'] = $category->id;
|
||||
} elseif (isset($data['category'])) {
|
||||
$data['expense_category_id'] = null;
|
||||
}
|
||||
|
||||
return $this->expenseRepo->save($data, $expense);
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,6 @@
|
||||
@if ($expense)
|
||||
{!! Former::populate($expense) !!}
|
||||
{!! Former::populateField('should_be_invoiced', intval($expense->should_be_invoiced)) !!}
|
||||
{!! Former::populateField('category', $expense->expense_category ? $expense->expense_category->name : '') !!}
|
||||
{!! Former::hidden('public_id') !!}
|
||||
@endif
|
||||
|
||||
@ -40,9 +39,10 @@
|
||||
->label(trans('texts.vendor'))
|
||||
->addGroupClass('vendor-select') !!}
|
||||
|
||||
{!! Former::text('category')
|
||||
->data_bind("typeahead: category, items: categories, key: 'name', valueUpdate: 'afterkeydown'")
|
||||
->label(trans('texts.category')) !!}
|
||||
{!! Former::select('expense_category_id')->addOption('', '')
|
||||
->data_bind('combobox: expense_category_id')
|
||||
->label(trans('texts.category'))
|
||||
->addGroupClass('category-select') !!}
|
||||
|
||||
{!! Former::text('expense_date')
|
||||
->data_date_format(Session::get(SESSION_DATE_PICKER_FORMAT, DEFAULT_DATE_PICKER_FORMAT))
|
||||
@ -132,12 +132,12 @@
|
||||
</div>
|
||||
|
||||
<center class="buttons">
|
||||
{!! Button::normal(trans('texts.cancel'))->large()->asLinkTo(URL::to('/expenses'))->appendIcon(Icon::create('remove-circle')) !!}
|
||||
{!! Button::success(trans('texts.save'))->submit()->large()->appendIcon(Icon::create('floppy-disk')) !!}
|
||||
{!! Button::normal(trans('texts.cancel'))->asLinkTo(URL::to('/expenses'))->appendIcon(Icon::create('remove-circle')) !!}
|
||||
{!! Button::success(trans('texts.save'))->submit()->appendIcon(Icon::create('floppy-disk')) !!}
|
||||
{!! Button::normal(trans('texts.categories'))->asLinkTo(URL::to('/expense_categories'))->appendIcon(Icon::create('list')) !!}
|
||||
@if ($expense)
|
||||
{!! DropdownButton::normal(trans('texts.more_actions'))
|
||||
->withContents($actions)
|
||||
->large()
|
||||
->dropup() !!}
|
||||
@endif
|
||||
</center>
|
||||
@ -149,6 +149,7 @@
|
||||
|
||||
var vendors = {!! $vendors !!};
|
||||
var clients = {!! $clients !!};
|
||||
var categories = {!! $categories !!};
|
||||
|
||||
var clientMap = {};
|
||||
for (var i=0; i<clients.length; i++) {
|
||||
@ -193,6 +194,13 @@
|
||||
}
|
||||
$vendorSelect.combobox();
|
||||
|
||||
var $categorySelect = $('select#expense_category_id');
|
||||
for (var i = 0; i < categories.length; i++) {
|
||||
var category = categories[i];
|
||||
$categorySelect.append(new Option(category.name, category.public_id));
|
||||
}
|
||||
$categorySelect.combobox();
|
||||
|
||||
$('#expense_date').datepicker('update', '{{ $expense ? $expense->expense_date : 'new Date()' }}');
|
||||
|
||||
$('.expense_date .input-group-addon').click(function() {
|
||||
@ -285,8 +293,6 @@
|
||||
var ViewModel = function(data) {
|
||||
var self = this;
|
||||
|
||||
self.categories = {!! $categories !!};
|
||||
self.category = ko.observable();
|
||||
self.expense_currency_id = ko.observable();
|
||||
self.invoice_currency_id = ko.observable();
|
||||
self.documents = ko.observableArray();
|
||||
@ -310,6 +316,7 @@
|
||||
self.account_currency_id = ko.observable({{ $account->getCurrencyId() }});
|
||||
self.client_id = ko.observable({{ $clientPublicId }});
|
||||
self.vendor_id = ko.observable({{ $vendorPublicId }});
|
||||
self.expense_category_id = ko.observable({{ $categoryPublicId }});
|
||||
|
||||
self.convertedAmount = ko.computed({
|
||||
read: function () {
|
||||
|
@ -862,6 +862,7 @@
|
||||
for (var i=0; i<expenses.length; i++) {
|
||||
var expense = expenses[i];
|
||||
var item = model.invoice().addItem();
|
||||
item.product_key(expense.expense_category ? expense.expense_category.name() : '');
|
||||
item.notes(expense.public_notes());
|
||||
item.qty(1);
|
||||
item.expense_public_id(expense.public_id());
|
||||
|
@ -799,6 +799,19 @@ function DocumentModel(data) {
|
||||
}
|
||||
}
|
||||
|
||||
function CategoryModel(data) {
|
||||
var self = this;
|
||||
self.name = ko.observable('')
|
||||
|
||||
self.update = function(data){
|
||||
ko.mapping.fromJS(data, {}, this);
|
||||
}
|
||||
|
||||
if (data) {
|
||||
self.update(data);
|
||||
}
|
||||
}
|
||||
|
||||
var ExpenseModel = function(data) {
|
||||
var self = this;
|
||||
|
||||
@ -807,6 +820,11 @@ var ExpenseModel = function(data) {
|
||||
create: function(options) {
|
||||
return new DocumentModel(options.data);
|
||||
}
|
||||
},
|
||||
'expense_category': {
|
||||
create: function(options) {
|
||||
return new CategoryModel(options.data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user