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,
|
'vendor' => $vendor,
|
||||||
'clients' => Client::scope()->with('contacts')->orderBy('name')->get(),
|
'clients' => Client::scope()->with('contacts')->orderBy('name')->get(),
|
||||||
'clientPublicId' => $request->client_id,
|
'clientPublicId' => $request->client_id,
|
||||||
|
'categoryPublicId' => $request->category_id,
|
||||||
];
|
];
|
||||||
|
|
||||||
$data = array_merge($data, self::getViewModel());
|
$data = array_merge($data, self::getViewModel());
|
||||||
@ -125,6 +126,7 @@ class ExpenseController extends BaseController
|
|||||||
'vendorPublicId' => $expense->vendor ? $expense->vendor->public_id : null,
|
'vendorPublicId' => $expense->vendor ? $expense->vendor->public_id : null,
|
||||||
'clients' => Client::scope()->with('contacts')->orderBy('name')->get(),
|
'clients' => Client::scope()->with('contacts')->orderBy('name')->get(),
|
||||||
'clientPublicId' => $expense->client ? $expense->client->public_id : null,
|
'clientPublicId' => $expense->client ? $expense->client->public_id : null,
|
||||||
|
'categoryPublicId' => $expense->expense_category ? $expense->expense_category->public_id : null,
|
||||||
];
|
];
|
||||||
|
|
||||||
$data = array_merge($data, self::getViewModel());
|
$data = array_merge($data, self::getViewModel());
|
||||||
@ -234,7 +236,7 @@ class ExpenseController extends BaseController
|
|||||||
'countries' => Cache::get('countries'),
|
'countries' => Cache::get('countries'),
|
||||||
'customLabel1' => Auth::user()->account->custom_vendor_label1,
|
'customLabel1' => Auth::user()->account->custom_vendor_label1,
|
||||||
'customLabel2' => Auth::user()->account->custom_vendor_label2,
|
'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;
|
$invoice->public_id = 0;
|
||||||
|
|
||||||
if (Session::get('expenses')) {
|
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']);
|
$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);
|
return $this->expenseRepo->save($data, $expense);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,6 @@
|
|||||||
@if ($expense)
|
@if ($expense)
|
||||||
{!! Former::populate($expense) !!}
|
{!! Former::populate($expense) !!}
|
||||||
{!! Former::populateField('should_be_invoiced', intval($expense->should_be_invoiced)) !!}
|
{!! Former::populateField('should_be_invoiced', intval($expense->should_be_invoiced)) !!}
|
||||||
{!! Former::populateField('category', $expense->expense_category ? $expense->expense_category->name : '') !!}
|
|
||||||
{!! Former::hidden('public_id') !!}
|
{!! Former::hidden('public_id') !!}
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
@ -40,9 +39,10 @@
|
|||||||
->label(trans('texts.vendor'))
|
->label(trans('texts.vendor'))
|
||||||
->addGroupClass('vendor-select') !!}
|
->addGroupClass('vendor-select') !!}
|
||||||
|
|
||||||
{!! Former::text('category')
|
{!! Former::select('expense_category_id')->addOption('', '')
|
||||||
->data_bind("typeahead: category, items: categories, key: 'name', valueUpdate: 'afterkeydown'")
|
->data_bind('combobox: expense_category_id')
|
||||||
->label(trans('texts.category')) !!}
|
->label(trans('texts.category'))
|
||||||
|
->addGroupClass('category-select') !!}
|
||||||
|
|
||||||
{!! Former::text('expense_date')
|
{!! Former::text('expense_date')
|
||||||
->data_date_format(Session::get(SESSION_DATE_PICKER_FORMAT, DEFAULT_DATE_PICKER_FORMAT))
|
->data_date_format(Session::get(SESSION_DATE_PICKER_FORMAT, DEFAULT_DATE_PICKER_FORMAT))
|
||||||
@ -132,12 +132,12 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<center class="buttons">
|
<center class="buttons">
|
||||||
{!! Button::normal(trans('texts.cancel'))->large()->asLinkTo(URL::to('/expenses'))->appendIcon(Icon::create('remove-circle')) !!}
|
{!! Button::normal(trans('texts.cancel'))->asLinkTo(URL::to('/expenses'))->appendIcon(Icon::create('remove-circle')) !!}
|
||||||
{!! Button::success(trans('texts.save'))->submit()->large()->appendIcon(Icon::create('floppy-disk')) !!}
|
{!! 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)
|
@if ($expense)
|
||||||
{!! DropdownButton::normal(trans('texts.more_actions'))
|
{!! DropdownButton::normal(trans('texts.more_actions'))
|
||||||
->withContents($actions)
|
->withContents($actions)
|
||||||
->large()
|
|
||||||
->dropup() !!}
|
->dropup() !!}
|
||||||
@endif
|
@endif
|
||||||
</center>
|
</center>
|
||||||
@ -149,6 +149,7 @@
|
|||||||
|
|
||||||
var vendors = {!! $vendors !!};
|
var vendors = {!! $vendors !!};
|
||||||
var clients = {!! $clients !!};
|
var clients = {!! $clients !!};
|
||||||
|
var categories = {!! $categories !!};
|
||||||
|
|
||||||
var clientMap = {};
|
var clientMap = {};
|
||||||
for (var i=0; i<clients.length; i++) {
|
for (var i=0; i<clients.length; i++) {
|
||||||
@ -193,6 +194,13 @@
|
|||||||
}
|
}
|
||||||
$vendorSelect.combobox();
|
$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').datepicker('update', '{{ $expense ? $expense->expense_date : 'new Date()' }}');
|
||||||
|
|
||||||
$('.expense_date .input-group-addon').click(function() {
|
$('.expense_date .input-group-addon').click(function() {
|
||||||
@ -285,8 +293,6 @@
|
|||||||
var ViewModel = function(data) {
|
var ViewModel = function(data) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
self.categories = {!! $categories !!};
|
|
||||||
self.category = ko.observable();
|
|
||||||
self.expense_currency_id = ko.observable();
|
self.expense_currency_id = ko.observable();
|
||||||
self.invoice_currency_id = ko.observable();
|
self.invoice_currency_id = ko.observable();
|
||||||
self.documents = ko.observableArray();
|
self.documents = ko.observableArray();
|
||||||
@ -310,6 +316,7 @@
|
|||||||
self.account_currency_id = ko.observable({{ $account->getCurrencyId() }});
|
self.account_currency_id = ko.observable({{ $account->getCurrencyId() }});
|
||||||
self.client_id = ko.observable({{ $clientPublicId }});
|
self.client_id = ko.observable({{ $clientPublicId }});
|
||||||
self.vendor_id = ko.observable({{ $vendorPublicId }});
|
self.vendor_id = ko.observable({{ $vendorPublicId }});
|
||||||
|
self.expense_category_id = ko.observable({{ $categoryPublicId }});
|
||||||
|
|
||||||
self.convertedAmount = ko.computed({
|
self.convertedAmount = ko.computed({
|
||||||
read: function () {
|
read: function () {
|
||||||
|
@ -862,6 +862,7 @@
|
|||||||
for (var i=0; i<expenses.length; i++) {
|
for (var i=0; i<expenses.length; i++) {
|
||||||
var expense = expenses[i];
|
var expense = expenses[i];
|
||||||
var item = model.invoice().addItem();
|
var item = model.invoice().addItem();
|
||||||
|
item.product_key(expense.expense_category ? expense.expense_category.name() : '');
|
||||||
item.notes(expense.public_notes());
|
item.notes(expense.public_notes());
|
||||||
item.qty(1);
|
item.qty(1);
|
||||||
item.expense_public_id(expense.public_id());
|
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 ExpenseModel = function(data) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
@ -807,6 +820,11 @@ var ExpenseModel = function(data) {
|
|||||||
create: function(options) {
|
create: function(options) {
|
||||||
return new DocumentModel(options.data);
|
return new DocumentModel(options.data);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
'expense_category': {
|
||||||
|
create: function(options) {
|
||||||
|
return new CategoryModel(options.data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user