mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Implemented the view client screen
This commit is contained in:
parent
b6da02a6b9
commit
470e0bf06e
21
app/controllers/ActivityController.php
Executable file
21
app/controllers/ActivityController.php
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class ActivityController extends \BaseController {
|
||||||
|
|
||||||
|
public function getDatatable($clientId)
|
||||||
|
{
|
||||||
|
return Datatable::collection(Activity::where('account_id','=',Auth::user()->account_id)
|
||||||
|
->where('client_id','=',$clientId)->get())
|
||||||
|
->addColumn('date', function($model)
|
||||||
|
{
|
||||||
|
return $model->created_at->format('m/d/y h:i a');
|
||||||
|
})
|
||||||
|
->addColumn('message', function($model)
|
||||||
|
{
|
||||||
|
return $model->message;
|
||||||
|
})
|
||||||
|
->orderColumns('date')
|
||||||
|
->make();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -79,7 +79,10 @@ class ClientController extends \BaseController {
|
|||||||
*/
|
*/
|
||||||
public function show($id)
|
public function show($id)
|
||||||
{
|
{
|
||||||
$client = Client::find($id);
|
$client = Client::with('contacts')->find($id);
|
||||||
|
trackViewed(Request::url(), $client->name);
|
||||||
|
|
||||||
|
|
||||||
return View::make('clients.show')->with('client', $client);
|
return View::make('clients.show')->with('client', $client);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,6 +131,7 @@ class ClientController extends \BaseController {
|
|||||||
$client = Client::find($id);
|
$client = Client::find($id);
|
||||||
} else {
|
} else {
|
||||||
$client = new Client;
|
$client = new Client;
|
||||||
|
$client->account_id = Auth::user()->account_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
$client->name = Input::get('name');
|
$client->name = Input::get('name');
|
||||||
|
@ -13,18 +13,28 @@ class InvoiceController extends \BaseController {
|
|||||||
return View::make('invoices.index');
|
return View::make('invoices.index');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getDatatable()
|
public function getDatatable($clientId = null)
|
||||||
{
|
{
|
||||||
return Datatable::collection(Invoice::with('client','invoice_items')->where('account_id','=',Auth::user()->account_id)->get())
|
$collection = Invoice::with('client','invoice_items')->where('account_id','=',Auth::user()->account_id);
|
||||||
->addColumn('number', function($model)
|
|
||||||
{
|
if ($clientId) {
|
||||||
return link_to('invoices/' . $model->id . '/edit', $model->invoice_number);
|
$collection->where('client_id','=',$clientId);
|
||||||
})
|
}
|
||||||
->addColumn('client', function($model)
|
|
||||||
{
|
$table = Datatable::collection($collection->get())->addColumn('number', function($model)
|
||||||
return link_to('clients/' . $model->client->id, $model->client->name);
|
{
|
||||||
})
|
return link_to('invoices/' . $model->id . '/edit', $model->invoice_number);
|
||||||
->addColumn('amount', function($model)
|
});
|
||||||
|
|
||||||
|
if (!$clientId)
|
||||||
|
{
|
||||||
|
$table->addColumn('client', function($model) {
|
||||||
|
return link_to('clients/' . $model->client->id, $model->client->name);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return $table->addColumn('amount', function($model)
|
||||||
{
|
{
|
||||||
return '$' . money_format('%i', $model->getTotal());
|
return '$' . money_format('%i', $model->getTotal());
|
||||||
})
|
})
|
||||||
@ -33,7 +43,7 @@ class InvoiceController extends \BaseController {
|
|||||||
return $model->created_at->format('m/d/y h:i a');
|
return $model->created_at->format('m/d/y h:i a');
|
||||||
})
|
})
|
||||||
->orderColumns('number')
|
->orderColumns('number')
|
||||||
->make();
|
->make();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -176,7 +186,8 @@ class InvoiceController extends \BaseController {
|
|||||||
public function edit($id)
|
public function edit($id)
|
||||||
{
|
{
|
||||||
$invoice = Invoice::with('client', 'invoice_items')->find($id);
|
$invoice = Invoice::with('client', 'invoice_items')->find($id);
|
||||||
|
trackViewed(Request::url(), $invoice->invoice_number . ' - ' . $invoice->client->name);
|
||||||
|
|
||||||
$data = array(
|
$data = array(
|
||||||
'invoice' => $invoice,
|
'invoice' => $invoice,
|
||||||
'method' => 'PUT',
|
'method' => 'PUT',
|
||||||
|
@ -7,14 +7,24 @@ class PaymentController extends \BaseController
|
|||||||
return View::make('payments.index');
|
return View::make('payments.index');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getDatatable()
|
public function getDatatable($clientId = null)
|
||||||
{
|
{
|
||||||
return Datatable::collection(Payment::with('invoice.client')->where('account_id', '=', Auth::user()->account_id)->get())
|
$collection = Payment::with('invoice.client')->where('account_id', '=', Auth::user()->account_id);
|
||||||
->addColumn('client', function($model)
|
|
||||||
|
if ($clientId) {
|
||||||
|
$collection->where('client_id','=',$clientId);
|
||||||
|
}
|
||||||
|
|
||||||
|
$table = Datatable::collection($collection->get());
|
||||||
|
|
||||||
|
if (!$clientId) {
|
||||||
|
$table->addColumn('client', function($model)
|
||||||
{
|
{
|
||||||
return link_to('clients/' . $model->invoice->client->id, $model->invoice->client->name);
|
return link_to('clients/' . $model->invoice->client->id, $model->invoice->client->name);
|
||||||
})
|
});
|
||||||
->addColumn('invoice', function($model)
|
}
|
||||||
|
|
||||||
|
return $table->addColumn('invoice', function($model)
|
||||||
{
|
{
|
||||||
return link_to('invoices/' . $model->invoice->id . '/edit', $model->invoice->number);
|
return link_to('invoices/' . $model->invoice->id . '/edit', $model->invoice->number);
|
||||||
})
|
})
|
||||||
|
@ -195,6 +195,7 @@ class ConfideSetupUsersTable extends Migration {
|
|||||||
$t->increments('id');
|
$t->increments('id');
|
||||||
$t->integer('invoice_id');
|
$t->integer('invoice_id');
|
||||||
$t->integer('account_id');
|
$t->integer('account_id');
|
||||||
|
$t->integer('client_id');
|
||||||
$t->integer('contact_id');
|
$t->integer('contact_id');
|
||||||
$t->integer('user_id');
|
$t->integer('user_id');
|
||||||
$t->timestamps();
|
$t->timestamps();
|
||||||
|
8
app/libraries/entity.php
Normal file
8
app/libraries/entity.php
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?
|
||||||
|
|
||||||
|
class Entity
|
||||||
|
{
|
||||||
|
public $id;
|
||||||
|
public $type;
|
||||||
|
}
|
||||||
|
|
@ -27,6 +27,58 @@ class Client extends Eloquent
|
|||||||
{
|
{
|
||||||
return $this->hasMany('Contact');
|
return $this->hasMany('Contact');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getAddress()
|
||||||
|
{
|
||||||
|
$str = '';
|
||||||
|
|
||||||
|
if ($this->address1) {
|
||||||
|
$str .= $this->address1 . '<br/>';
|
||||||
|
}
|
||||||
|
if ($this->address2) {
|
||||||
|
$str .= $this->address2 . '<br/>';
|
||||||
|
}
|
||||||
|
if ($this->city) {
|
||||||
|
$str .= $this->city . ', ';
|
||||||
|
}
|
||||||
|
if ($this->state) {
|
||||||
|
$str .= $this->state . ' ';
|
||||||
|
}
|
||||||
|
if ($this->postal_code) {
|
||||||
|
$str .= $this->postal_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($str)
|
||||||
|
{
|
||||||
|
$str = '<p>' . $str . '</p>';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $str;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPhone()
|
||||||
|
{
|
||||||
|
$str = '';
|
||||||
|
|
||||||
|
if ($this->work_phone)
|
||||||
|
{
|
||||||
|
$str .= '<i class="fa fa-phone" style="width: 20px"></i>' . $this->work_phone;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $str;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getNotes()
|
||||||
|
{
|
||||||
|
$str = '';
|
||||||
|
|
||||||
|
if ($this->notes)
|
||||||
|
{
|
||||||
|
$str .= '<i>' . $this->notes . '</i>';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $str;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Client::created(function($client)
|
Client::created(function($client)
|
||||||
|
@ -32,11 +32,38 @@ class Contact extends Eloquent
|
|||||||
|
|
||||||
if ($fullName == ' ')
|
if ($fullName == ' ')
|
||||||
{
|
{
|
||||||
return "Unknown";
|
return 'Guest';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return $fullName;
|
return $fullName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getDetails()
|
||||||
|
{
|
||||||
|
$str = '';
|
||||||
|
|
||||||
|
if ($this->first_name || $this->last_name)
|
||||||
|
{
|
||||||
|
$str .= '<b>' . $this->first_name . ' ' . $this->last_name . '</b><br/>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->email)
|
||||||
|
{
|
||||||
|
$str .= '<i class="fa fa-envelope" style="width: 20px"></i>' . HTML::mailto($this->email, $this->email) . '<br/>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->phone)
|
||||||
|
{
|
||||||
|
$str .= '<i class="fa fa-phone" style="width: 20px"></i>' . $this->phone;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($str)
|
||||||
|
{
|
||||||
|
$str = '<p>' . $str . '</p>';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $str;
|
||||||
|
}
|
||||||
}
|
}
|
@ -39,15 +39,17 @@ Route::group(array('before' => array('auth', 'csrf')), function()
|
|||||||
Route::get('api/clients', array('as'=>'api.clients', 'uses'=>'ClientController@getDatatable'));
|
Route::get('api/clients', array('as'=>'api.clients', 'uses'=>'ClientController@getDatatable'));
|
||||||
|
|
||||||
Route::resource('invoices', 'InvoiceController');
|
Route::resource('invoices', 'InvoiceController');
|
||||||
Route::get('api/invoices', array('as'=>'api.invoices', 'uses'=>'InvoiceController@getDatatable'));
|
Route::get('api/invoices/{client_id?}', array('as'=>'api.invoices', 'uses'=>'InvoiceController@getDatatable'));
|
||||||
Route::get('invoices/create/{client_id}', 'InvoiceController@create');
|
Route::get('invoices/create/{client_id}', 'InvoiceController@create');
|
||||||
|
|
||||||
Route::get('payments', 'PaymentController@index');
|
Route::get('payments', 'PaymentController@index');
|
||||||
Route::get('api/payments', array('as'=>'api.payments', 'uses'=>'PaymentController@getDatatable'));
|
Route::get('api/payments/{client_id?}', array('as'=>'api.payments', 'uses'=>'PaymentController@getDatatable'));
|
||||||
|
|
||||||
Route::get('home', function() { return View::make('header'); });
|
Route::get('home', function() { return View::make('header'); });
|
||||||
Route::get('reports', function() { return View::make('header'); });
|
Route::get('reports', function() { return View::make('header'); });
|
||||||
Route::get('payments/create', function() { return View::make('header'); });
|
Route::get('payments/create', function() { return View::make('header'); });
|
||||||
|
|
||||||
|
Route::get('api/activities/{client_id?}', array('as'=>'api.activities', 'uses'=>'ActivityController@getDatatable'));
|
||||||
});
|
});
|
||||||
|
|
||||||
// Confide routes
|
// Confide routes
|
||||||
@ -65,9 +67,14 @@ Route::get('logout', 'UserController@logout');
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
HTML::macro('nav_link', function($url, $text, $url2 = '') {
|
HTML::macro('nav_link', function($url, $text, $url2 = '', $extra = '') {
|
||||||
$class = ( Request::is($url) || Request::is($url.'/*') || Request::is($url2) ) ? ' class="active"' : '';
|
$class = ( Request::is($url) || Request::is($url.'/*') || Request::is($url2) ) ? ' class="active"' : '';
|
||||||
return '<li'.$class.'><a href="'.URL::to($url).'">'.$text.'</a></li>';
|
return '<li'.$class.'><a href="'.URL::to($url).'" '.$extra.'>'.$text.'</a></li>';
|
||||||
|
});
|
||||||
|
|
||||||
|
HTML::macro('tab_link', function($url, $text, $active = false) {
|
||||||
|
$class = $active ? ' class="active"' : '';
|
||||||
|
return '<li'.$class.'><a href="'.URL::to($url).'" data-toggle="tab">'.$text.'</a></li>';
|
||||||
});
|
});
|
||||||
|
|
||||||
HTML::macro('menu_link', function($type) {
|
HTML::macro('menu_link', function($type) {
|
||||||
@ -131,10 +138,51 @@ function processedRequest($url)
|
|||||||
Session::put('_token', md5(microtime()));
|
Session::put('_token', md5(microtime()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function trackViewed($url, $name)
|
||||||
|
{
|
||||||
|
$viewed = Session::get(RECENTLY_VIEWED);
|
||||||
|
|
||||||
|
if (!$viewed)
|
||||||
|
{
|
||||||
|
$viewed = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$object = new stdClass;
|
||||||
|
$object->url = $url;
|
||||||
|
$object->name = $name;
|
||||||
|
|
||||||
|
for ($i=0; $i<count($viewed); $i++)
|
||||||
|
{
|
||||||
|
$item = $viewed[$i];
|
||||||
|
|
||||||
|
if ($object->url == $item->url)
|
||||||
|
{
|
||||||
|
array_splice($viewed, $i, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
array_unshift($viewed, $object);
|
||||||
|
|
||||||
|
if (count($viewed) > 5)
|
||||||
|
{
|
||||||
|
array_pop($viewed);
|
||||||
|
}
|
||||||
|
|
||||||
|
Session::put(RECENTLY_VIEWED, $viewed);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
define("ENV_DEVELOPMENT", "local");
|
define("ENV_DEVELOPMENT", "local");
|
||||||
define("ENV_STAGING", "staging");
|
define("ENV_STAGING", "staging");
|
||||||
define("ENV_PRODUCTION", "production");
|
define("ENV_PRODUCTION", "production");
|
||||||
|
|
||||||
|
define("RECENTLY_VIEWED", "RECENTLY_VIEWED");
|
||||||
|
define("ENTITY_CLIENT", "Client");
|
||||||
|
define("ENTITY_INVOICE", "Invoice");
|
||||||
|
define("ENTITY_PAYMENT", "Payment");
|
||||||
|
|
||||||
define("ACCOUNT_DETAILS", "details");
|
define("ACCOUNT_DETAILS", "details");
|
||||||
define("ACCOUNT_SETTINGS", "settings");
|
define("ACCOUNT_SETTINGS", "settings");
|
||||||
define("ACCOUNT_IMPORT", "import");
|
define("ACCOUNT_IMPORT", "import");
|
||||||
|
@ -17,6 +17,7 @@ ClassLoader::addDirectories(array(
|
|||||||
app_path().'/controllers',
|
app_path().'/controllers',
|
||||||
app_path().'/models',
|
app_path().'/models',
|
||||||
app_path().'/database/seeds',
|
app_path().'/database/seeds',
|
||||||
|
app_path().'/libraries',
|
||||||
|
|
||||||
));
|
));
|
||||||
|
|
||||||
|
@ -24,33 +24,41 @@
|
|||||||
@endif
|
@endif
|
||||||
{{ Former::populateField('phone', $account->users()->first()->phone) }}
|
{{ Former::populateField('phone', $account->users()->first()->phone) }}
|
||||||
|
|
||||||
{{ Former::legend('Account') }}
|
<div class="row">
|
||||||
{{ Former::text('name') }}
|
<div class="col-md-6">
|
||||||
|
|
||||||
{{ Former::file('logo')->max(2, 'MB')->accept('image')->wrap('test') }}
|
{{ Former::legend('Account') }}
|
||||||
|
{{ Former::text('name') }}
|
||||||
|
|
||||||
@if (file_exists($account->getLogoPath()))
|
{{ Former::file('logo')->max(2, 'MB')->accept('image')->wrap('test') }}
|
||||||
<center>
|
|
||||||
{{ HTML::image($account->getLogoPath(), "Logo") }}
|
|
||||||
</center>
|
|
||||||
@endif
|
|
||||||
|
|
||||||
{{ Former::legend('Users') }}
|
@if (file_exists($account->getLogoPath()))
|
||||||
{{ Former::text('first_name') }}
|
<center>
|
||||||
{{ Former::text('last_name') }}
|
{{ HTML::image($account->getLogoPath(), "Logo") }}
|
||||||
{{ Former::text('email')->label('Email/Username') }}
|
</center>
|
||||||
{{ Former::text('phone') }}
|
@endif
|
||||||
|
|
||||||
|
{{ Former::legend('Address') }}
|
||||||
|
{{ Former::text('address1')->label('Street') }}
|
||||||
|
{{ Former::text('address2')->label('Apt/Floor') }}
|
||||||
|
{{ Former::text('city') }}
|
||||||
|
{{ Former::text('state') }}
|
||||||
|
{{ Former::text('postal_code') }}
|
||||||
|
{{ Former::select('country_id')->addOption('','')->label('Country')
|
||||||
|
->fromQuery($countries, 'name', 'id')->select($account ? $account->country_id : '') }}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
{{ Former::legend('Address') }}
|
<div class="col-md-6">
|
||||||
{{ Former::text('address1')->label('Street') }}
|
|
||||||
{{ Former::text('address2')->label('Apt/Floor') }}
|
|
||||||
{{ Former::text('city') }}
|
|
||||||
{{ Former::text('state') }}
|
|
||||||
{{ Former::text('postal_code') }}
|
|
||||||
{{ Former::select('country_id')->addOption('','')->label('Country')
|
|
||||||
->fromQuery($countries, 'name', 'id')->select($account ? $account->country_id : '') }}
|
|
||||||
|
|
||||||
|
{{ Former::legend('Users') }}
|
||||||
|
{{ Former::text('first_name') }}
|
||||||
|
{{ Former::text('last_name') }}
|
||||||
|
{{ Former::text('email')->label('Email/Username') }}
|
||||||
|
{{ Former::text('phone') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{{ Former::actions( Button::lg_primary_submit('Save') ) }}
|
{{ Former::actions( Button::lg_primary_submit('Save') ) }}
|
||||||
{{ Former::close() }}
|
{{ Former::close() }}
|
||||||
|
|
||||||
|
@ -20,43 +20,53 @@
|
|||||||
@endif
|
@endif
|
||||||
|
|
||||||
|
|
||||||
{{ Former::legend('Organization') }}
|
<div class="row">
|
||||||
{{ Former::text('name') }}
|
<div class="col-md-6">
|
||||||
{{ Former::text('work_phone')->label('Phone') }}
|
|
||||||
{{ Former::textarea('notes') }}
|
{{ Former::legend('Organization') }}
|
||||||
|
{{ Former::text('name') }}
|
||||||
|
{{ Former::text('work_phone')->label('Phone') }}
|
||||||
|
{{ Former::textarea('notes') }}
|
||||||
|
|
||||||
|
|
||||||
|
{{ Former::legend('Address') }}
|
||||||
|
{{ Former::text('address1')->label('Street') }}
|
||||||
|
{{ Former::text('address2')->label('Apt/Floor') }}
|
||||||
|
{{ Former::text('city') }}
|
||||||
|
{{ Former::text('state') }}
|
||||||
|
{{ Former::text('postal_code') }}
|
||||||
|
{{ Former::select('country_id')->addOption('','')->label('Country')
|
||||||
|
->fromQuery($countries, 'name', 'id')->select($client ? $client->country_id : '') }}
|
||||||
|
|
||||||
{{ Former::legend('Contacts') }}
|
|
||||||
<div data-bind='template: { foreach: contacts,
|
|
||||||
beforeRemove: hideContact,
|
|
||||||
afterAdd: showContact }'>
|
|
||||||
{{ Former::hidden('id')->data_bind("value: id, valueUpdate: 'afterkeydown'") }}
|
|
||||||
{{ Former::text('first_name')->data_bind("value: first_name, valueUpdate: 'afterkeydown'") }}
|
|
||||||
{{ Former::text('last_name')->data_bind("value: last_name, valueUpdate: 'afterkeydown'") }}
|
|
||||||
{{ Former::text('email')->data_bind("value: email, valueUpdate: 'afterkeydown'") }}
|
|
||||||
{{ Former::text('phone')->data_bind("value: phone, valueUpdate: 'afterkeydown'") }}
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-lg-8 col-lg-offset-4">
|
|
||||||
<span data-bind="visible: $parent.contacts().length > 1">
|
|
||||||
{{ link_to('#', 'Remove contact', array('data-bind'=>'click: $parent.removeContact')) }}
|
|
||||||
</span>
|
|
||||||
<span data-bind="visible: $index() === ($parent.contacts().length - 1)" class="pull-right">
|
|
||||||
{{ link_to('#', 'Add contact', array('onclick'=>'return addContact()')) }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="clearfix"></div>
|
<div class="col-md-6">
|
||||||
|
|
||||||
|
{{ Former::legend('Contacts') }}
|
||||||
|
<div data-bind='template: { foreach: contacts,
|
||||||
|
beforeRemove: hideContact,
|
||||||
|
afterAdd: showContact }'>
|
||||||
|
{{ Former::hidden('id')->data_bind("value: id, valueUpdate: 'afterkeydown'") }}
|
||||||
|
{{ Former::text('first_name')->data_bind("value: first_name, valueUpdate: 'afterkeydown'") }}
|
||||||
|
{{ Former::text('last_name')->data_bind("value: last_name, valueUpdate: 'afterkeydown'") }}
|
||||||
|
{{ Former::text('email')->data_bind("value: email, valueUpdate: 'afterkeydown'") }}
|
||||||
|
{{ Former::text('phone')->data_bind("value: phone, valueUpdate: 'afterkeydown'") }}
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-lg-8 col-lg-offset-4">
|
||||||
|
<span data-bind="visible: $parent.contacts().length > 1">
|
||||||
|
{{ link_to('#', 'Remove contact', array('data-bind'=>'click: $parent.removeContact')) }}
|
||||||
|
</span>
|
||||||
|
<span data-bind="visible: $index() === ($parent.contacts().length - 1)" class="pull-right">
|
||||||
|
{{ link_to('#', 'Add contact', array('onclick'=>'return addContact()')) }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{ Former::legend('Address') }}
|
|
||||||
{{ Former::text('address1')->label('Street') }}
|
|
||||||
{{ Former::text('address2')->label('Apt/Floor') }}
|
|
||||||
{{ Former::text('city') }}
|
|
||||||
{{ Former::text('state') }}
|
|
||||||
{{ Former::text('postal_code') }}
|
|
||||||
{{ Former::select('country_id')->addOption('','')->label('Country')
|
|
||||||
->fromQuery($countries, 'name', 'id')->select($client ? $client->country_id : '') }}
|
|
||||||
|
|
||||||
|
|
||||||
{{ Former::hidden('data')->data_bind("value: ko.toJSON(model)") }}
|
{{ Former::hidden('data')->data_bind("value: ko.toJSON(model)") }}
|
||||||
|
@ -1,14 +1,88 @@
|
|||||||
@extends('header')
|
@extends('header')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
|
|
||||||
<h3>View Client</h3>
|
|
||||||
|
|
||||||
{{ $client->name }}
|
|
||||||
|
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
{{ Button::link(URL::to('clients/' . $client->id . '/edit'), 'Edit Client') }}
|
{{ Button::link(URL::to('clients/' . $client->id . '/edit'), 'Edit Client') }}
|
||||||
{{ Button::primary_link(URL::to('invoices/create/' . $client->id), 'Create Invoice') }}
|
{{ Button::primary_link(URL::to('invoices/create/' . $client->id), 'Create Invoice') }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<h2>{{ $client->name }}</h2>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-md-3">
|
||||||
|
<h3>Details</h3>
|
||||||
|
<p>{{ $client->getAddress() }}</p>
|
||||||
|
<p>{{ $client->getPhone() }}</p>
|
||||||
|
<p>{{ $client->getNotes() }}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-3">
|
||||||
|
<h3>Contacts</h3>
|
||||||
|
@foreach ($client->contacts as $contact)
|
||||||
|
{{ $contact->getDetails() }}
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
<h3>Balance</h3>
|
||||||
|
<h3>$0.00 <small>Paid to Date USD</small></h3>
|
||||||
|
<h3>$0.00 <small>Outstanding USD</small></h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p> </p>
|
||||||
|
|
||||||
|
<ul class="nav nav-tabs nav-justified">
|
||||||
|
{{ HTML::tab_link('#activity', 'Activity', true) }}
|
||||||
|
{{ HTML::tab_link('#invoices', 'Invoices') }}
|
||||||
|
{{ HTML::tab_link('#payments', 'Payments') }}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="tab-content">
|
||||||
|
|
||||||
|
<div class="tab-pane active" id="activity">
|
||||||
|
|
||||||
|
{{ Datatable::table()
|
||||||
|
->addColumn('Date', 'Message')
|
||||||
|
->setUrl(url('api/activities/'. $client->id))
|
||||||
|
->setOptions('sPaginationType', 'bootstrap')
|
||||||
|
->setOptions('bFilter', false)
|
||||||
|
->render() }}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tab-pane" id="invoices">
|
||||||
|
|
||||||
|
{{ Datatable::table()
|
||||||
|
->addColumn('Invoice Number', 'Amount', 'Date')
|
||||||
|
->setUrl(url('api/invoices/' . $client->id))
|
||||||
|
->setOptions('sPaginationType', 'bootstrap')
|
||||||
|
->setOptions('bFilter', false)
|
||||||
|
->render() }}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="payments">
|
||||||
|
|
||||||
|
|
||||||
|
{{ Datatable::table()
|
||||||
|
->addColumn('Invoice Number', 'Amount', 'Date')
|
||||||
|
->setUrl(url('api/payments/' . $client->id))
|
||||||
|
->setOptions('sPaginationType', 'bootstrap')
|
||||||
|
->setOptions('bFilter', false)
|
||||||
|
->render() }}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
$(function() {
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
@stop
|
@stop
|
@ -23,12 +23,13 @@
|
|||||||
<link rel="stylesheet" type="text/css" href="{{ asset('css/typeahead.js-bootstrap.css') }}"/>
|
<link rel="stylesheet" type="text/css" href="{{ asset('css/typeahead.js-bootstrap.css') }}"/>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="{{ asset('css/bootstrap.css') }}"/>
|
<link rel="stylesheet" type="text/css" href="{{ asset('css/bootstrap.css') }}"/>
|
||||||
|
<script src="{{ asset('js/bootstrap.js') }}" type="text/javascript"></script>
|
||||||
<!-- <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap-theme.min.css"> -->
|
<!-- <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap-theme.min.css"> -->
|
||||||
|
|
||||||
|
|
||||||
{{-- Basset::show('bootstrapper.css') --}}
|
{{-- Basset::show('bootstrapper.css') --}}
|
||||||
{{ Basset::show('bootstrapper.js') }}
|
{{-- Basset::show('bootstrapper.js') --}}
|
||||||
|
|
||||||
|
|
||||||
<script src="{{ asset('js/bootstrap-combobox.js') }}" type="text/javascript"></script>
|
<script src="{{ asset('js/bootstrap-combobox.js') }}" type="text/javascript"></script>
|
||||||
@ -61,7 +62,7 @@
|
|||||||
|
|
||||||
|
|
||||||
body > div.container {
|
body > div.container {
|
||||||
max-width: 850px;
|
/*max-width: 850px;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
label.control-label {
|
label.control-label {
|
||||||
@ -69,6 +70,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
div.panel {
|
||||||
|
padding-left: 0px !important;
|
||||||
|
padding-right: 0px !important;
|
||||||
|
}
|
||||||
|
|
||||||
.form-actions {
|
.form-actions {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
@ -233,7 +239,7 @@
|
|||||||
|
|
||||||
<p/>
|
<p/>
|
||||||
<div>
|
<div>
|
||||||
<span style="font-size:38px">LOGO</span>
|
<span style="font-size:30px">Invoice Ninja</span>
|
||||||
<div style="float:right;text-align:right">
|
<div style="float:right;text-align:right">
|
||||||
Logged in as Guest (<u>Sign up</u>) | {{ link_to('account/details', 'My Account') }}
|
Logged in as Guest (<u>Sign up</u>) | {{ link_to('account/details', 'My Account') }}
|
||||||
<p class="text-danger">This is a sample site, the data is erased</p>
|
<p class="text-danger">This is a sample site, the data is erased</p>
|
||||||
@ -261,11 +267,25 @@
|
|||||||
{{ HTML::menu_link('payment') }}
|
{{ HTML::menu_link('payment') }}
|
||||||
{{-- HTML::nav_link('reports', 'Reports') --}}
|
{{-- HTML::nav_link('reports', 'Reports') --}}
|
||||||
</ul>
|
</ul>
|
||||||
<form class="navbar-form navbar-right" role="search">
|
<ul class="nav navbar-nav navbar-right">
|
||||||
|
<li class="dropdown">
|
||||||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Recently Viewed <b class="caret"></b></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
@if (count(Session::get(RECENTLY_VIEWED)) == 0)
|
||||||
|
<li><a href="#">No items</a></li>
|
||||||
|
@else
|
||||||
|
@foreach (Session::get(RECENTLY_VIEWED) as $link)
|
||||||
|
<li><a href="{{ $link->url }}">{{ $link->name }}</a></li>
|
||||||
|
@endforeach
|
||||||
|
@endif
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<form class="navbar-form navbar-left" role="search">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="text" id="search" class="form-control" placeholder="Search">
|
<input type="text" id="search" class="form-control" placeholder="Search">
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
</ul>
|
||||||
</div><!-- /.navbar-collapse -->
|
</div><!-- /.navbar-collapse -->
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
{{ Button::primary_link(URL::to('invoices/create'), 'New Invoice', array('class' => 'pull-right')) }}
|
{{ Button::primary_link(URL::to('invoices/create'), 'New Invoice', array('class' => 'pull-right')) }}
|
||||||
|
|
||||||
{{ Datatable::table()
|
{{ Datatable::table()
|
||||||
->addColumn('Number', 'Client', 'Amount', 'Date')
|
->addColumn('Invoice Number', 'Client', 'Amount', 'Date')
|
||||||
->setUrl(route('api.invoices'))
|
->setUrl(route('api.invoices'))
|
||||||
->setOptions('sPaginationType', 'bootstrap')
|
->setOptions('sPaginationType', 'bootstrap')
|
||||||
->setOptions('bFilter', false)
|
->setOptions('bFilter', false)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user