Working on expense categories

This commit is contained in:
Hillel Coren 2016-07-07 11:03:43 +03:00
parent cd9aae1e22
commit e6b60c6f1a
6 changed files with 39 additions and 24 deletions

View File

@ -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(),
];
}

View File

@ -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();
}

View File

@ -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);
}

View File

@ -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 () {

View File

@ -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());

View File

@ -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);
}
}
}