mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Added ability to archive & delete
This commit is contained in:
parent
470e0bf06e
commit
329a47e761
@ -216,5 +216,6 @@ return array(
|
|||||||
'CreditCard' => 'Omnipay\Common\CreditCard',
|
'CreditCard' => 'Omnipay\Common\CreditCard',
|
||||||
'Image' => 'Intervention\Image\Facades\Image',
|
'Image' => 'Intervention\Image\Facades\Image',
|
||||||
'Countries' => 'Webpatser\Countries\CountriesFacade',
|
'Countries' => 'Webpatser\Countries\CountriesFacade',
|
||||||
|
'Carbon' => 'Carbon\Carbon',
|
||||||
),
|
),
|
||||||
);
|
);
|
@ -12,12 +12,19 @@ class ClientController extends \BaseController {
|
|||||||
//$clients = Client::orderBy('name')->get();
|
//$clients = Client::orderBy('name')->get();
|
||||||
//return View::make('clients.index')->with('clients', $clients);
|
//return View::make('clients.index')->with('clients', $clients);
|
||||||
|
|
||||||
return View::make('clients.index');
|
return View::make('list', array(
|
||||||
|
'entityType'=>ENTITY_CLIENT,
|
||||||
|
'columns'=>['checkbox', 'Client', 'Contact', 'Balance', 'Last Login', 'Date Created', 'Email', 'Phone']
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getDatatable()
|
public function getDatatable()
|
||||||
{
|
{
|
||||||
return Datatable::collection(Client::with('contacts')->where('account_id','=',Auth::user()->account_id)->get())
|
return Datatable::collection(Client::with('contacts')->where('account_id','=',Auth::user()->account_id)->get())
|
||||||
|
->addColumn('checkbox', function($model)
|
||||||
|
{
|
||||||
|
return '<input type="checkbox" name="ids[]" value="' . $model->id . '">';
|
||||||
|
})
|
||||||
->addColumn('name', function($model)
|
->addColumn('name', function($model)
|
||||||
{
|
{
|
||||||
//return $model->name;
|
//return $model->name;
|
||||||
@ -27,9 +34,17 @@ class ClientController extends \BaseController {
|
|||||||
{
|
{
|
||||||
return $model->contacts[0]->getFullName();
|
return $model->contacts[0]->getFullName();
|
||||||
})
|
})
|
||||||
|
->addColumn('balance', function($model)
|
||||||
|
{
|
||||||
|
return '$' . $model->balance;
|
||||||
|
})
|
||||||
->addColumn('last_login', function($model)
|
->addColumn('last_login', function($model)
|
||||||
{
|
{
|
||||||
return $model->contacts[0]->lastLogin();
|
return $model->contacts[0]->getLastLogin();
|
||||||
|
})
|
||||||
|
->addColumn('date_created', function($model)
|
||||||
|
{
|
||||||
|
return $model->getDateCreated();
|
||||||
})
|
})
|
||||||
->addColumn('email', function($model)
|
->addColumn('email', function($model)
|
||||||
{
|
{
|
||||||
@ -183,18 +198,27 @@ class ClientController extends \BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove the specified resource from storage.
|
* Bulk update the records
|
||||||
*
|
*
|
||||||
* @param int $id
|
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
public function destroy($id)
|
public function bulk()
|
||||||
{
|
{
|
||||||
$client = Client::find($id);
|
$action = Input::get('action');
|
||||||
$client->delete();
|
$ids = Input::get('ids');
|
||||||
|
$clients = Client::find($ids);
|
||||||
|
|
||||||
|
foreach ($clients as $client) {
|
||||||
|
if ($action == 'archive') {
|
||||||
|
$client->delete();
|
||||||
|
} else if ($action == 'delete') {
|
||||||
|
$client->forceDelete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$message = pluralize('Successfully '.$action.'d ? client', count($ids));
|
||||||
|
Session::flash('message', $message);
|
||||||
|
|
||||||
// redirect
|
|
||||||
Session::flash('message', 'Successfully deleted the client');
|
|
||||||
return Redirect::to('clients');
|
return Redirect::to('clients');
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -10,21 +10,29 @@ class InvoiceController extends \BaseController {
|
|||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
//$invoices = Invoice::with('client')->orderBy('created_at', 'DESC')->get();
|
//$invoices = Invoice::with('client')->orderBy('created_at', 'DESC')->get();
|
||||||
return View::make('invoices.index');
|
//return View::make('invoices.index');
|
||||||
|
return View::make('list', array(
|
||||||
|
'entityType'=>ENTITY_INVOICE,
|
||||||
|
'columns'=>['checkbox', 'Invoice Number', 'Client', 'Total', 'Amount Due', 'Invoice Date', 'Due Date', 'Status']
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getDatatable($clientId = null)
|
public function getDatatable($clientId = null)
|
||||||
{
|
{
|
||||||
$collection = Invoice::with('client','invoice_items')->where('account_id','=',Auth::user()->account_id);
|
$collection = Invoice::with('client','invoice_items','invoice_status')->where('account_id','=',Auth::user()->account_id);
|
||||||
|
|
||||||
if ($clientId) {
|
if ($clientId) {
|
||||||
$collection->where('client_id','=',$clientId);
|
$collection->where('client_id','=',$clientId);
|
||||||
}
|
}
|
||||||
|
|
||||||
$table = Datatable::collection($collection->get())->addColumn('number', function($model)
|
$table = Datatable::collection($collection->get())->addColumn('checkbox', function($model)
|
||||||
{
|
{
|
||||||
return link_to('invoices/' . $model->id . '/edit', $model->invoice_number);
|
return '<input type="checkbox" name="ids[]" value="' . $model->id . '">';
|
||||||
});
|
})
|
||||||
|
->addColumn('invoice_number', function($model)
|
||||||
|
{
|
||||||
|
return link_to('invoices/' . $model->id . '/edit', $model->invoice_number);
|
||||||
|
});
|
||||||
|
|
||||||
if (!$clientId)
|
if (!$clientId)
|
||||||
{
|
{
|
||||||
@ -34,13 +42,25 @@ class InvoiceController extends \BaseController {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $table->addColumn('amount', function($model)
|
return $table->addColumn('total', function($model)
|
||||||
{
|
{
|
||||||
return '$' . money_format('%i', $model->getTotal());
|
return '$' . money_format('%i', $model->getTotal());
|
||||||
})
|
})
|
||||||
->addColumn('date', function($model)
|
->addColumn('amount_due', function($model)
|
||||||
{
|
{
|
||||||
return $model->created_at->format('m/d/y h:i a');
|
return '$' . money_format('%i', $model->getTotal());
|
||||||
|
})
|
||||||
|
->addColumn('invoice_date', function($model)
|
||||||
|
{
|
||||||
|
return (new Carbon($model->invoice_date))->toFormattedDateString();
|
||||||
|
})
|
||||||
|
->addColumn('due_date', function($model)
|
||||||
|
{
|
||||||
|
return $model->due_date == '0000-00-00' ? '' : (new Carbon($model->due_date))->toFormattedDateString();
|
||||||
|
})
|
||||||
|
->addColumn('status', function($model)
|
||||||
|
{
|
||||||
|
return $model->invoice_status->name;
|
||||||
})
|
})
|
||||||
->orderColumns('number')
|
->orderColumns('number')
|
||||||
->make();
|
->make();
|
||||||
@ -375,13 +395,23 @@ class InvoiceController extends \BaseController {
|
|||||||
* @param int $id
|
* @param int $id
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
public function destroy($id)
|
public function bulk()
|
||||||
{
|
{
|
||||||
$invoice = Invoice::find($id);
|
$action = Input::get('action');
|
||||||
$invoice->delete();
|
$ids = Input::get('ids');
|
||||||
|
$invoices = Invoice::find($ids);
|
||||||
|
|
||||||
|
foreach ($invoices as $invoice) {
|
||||||
|
if ($action == 'archive') {
|
||||||
|
$invoice->delete();
|
||||||
|
} else if ($action == 'delete') {
|
||||||
|
$invoice->forceDelete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$message = pluralize('Successfully '.$action.'d ? invoice', count($ids));
|
||||||
|
Session::flash('message', $message);
|
||||||
|
|
||||||
// redirect
|
|
||||||
Session::flash('message', 'Successfully deleted the invoice');
|
|
||||||
return Redirect::to('invoices');
|
return Redirect::to('invoices');
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -10,6 +10,7 @@ class ConfideSetupUsersTable extends Migration {
|
|||||||
*/
|
*/
|
||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
|
Schema::dropIfExists('invoice_statuses');
|
||||||
Schema::dropIfExists('invitations');
|
Schema::dropIfExists('invitations');
|
||||||
Schema::dropIfExists('activities');
|
Schema::dropIfExists('activities');
|
||||||
Schema::dropIfExists('account_gateways');
|
Schema::dropIfExists('account_gateways');
|
||||||
@ -110,7 +111,7 @@ class ConfideSetupUsersTable extends Migration {
|
|||||||
$t->integer('country_id');
|
$t->integer('country_id');
|
||||||
$t->string('work_phone');
|
$t->string('work_phone');
|
||||||
$t->text('notes');
|
$t->text('notes');
|
||||||
|
$t->decimal('balance', 10, 2);
|
||||||
//$t->foreign('account_id')->references('id')->on('accounts');
|
//$t->foreign('account_id')->references('id')->on('accounts');
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -136,6 +137,7 @@ class ConfideSetupUsersTable extends Migration {
|
|||||||
$t->increments('id');
|
$t->increments('id');
|
||||||
$t->integer('client_id');
|
$t->integer('client_id');
|
||||||
$t->integer('account_id');
|
$t->integer('account_id');
|
||||||
|
$t->integer('invoice_status_id')->default(1);
|
||||||
$t->timestamps();
|
$t->timestamps();
|
||||||
$t->softDeletes();
|
$t->softDeletes();
|
||||||
|
|
||||||
@ -147,6 +149,12 @@ class ConfideSetupUsersTable extends Migration {
|
|||||||
//$t->foreign('account_id')->references('id')->on('accounts');
|
//$t->foreign('account_id')->references('id')->on('accounts');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Schema::create('invoice_statuses', function($t)
|
||||||
|
{
|
||||||
|
$t->increments('id');
|
||||||
|
$t->string('name');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
Schema::create('invitations', function($t)
|
Schema::create('invitations', function($t)
|
||||||
{
|
{
|
||||||
@ -232,6 +240,7 @@ class ConfideSetupUsersTable extends Migration {
|
|||||||
*/
|
*/
|
||||||
public function down()
|
public function down()
|
||||||
{
|
{
|
||||||
|
Schema::dropIfExists('invoice_statuses');
|
||||||
Schema::dropIfExists('invitations');
|
Schema::dropIfExists('invitations');
|
||||||
Schema::dropIfExists('activities');
|
Schema::dropIfExists('activities');
|
||||||
Schema::dropIfExists('account_gateways');
|
Schema::dropIfExists('account_gateways');
|
||||||
|
@ -5,8 +5,39 @@ class ConstantsSeeder extends Seeder
|
|||||||
|
|
||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
DB::table('gateways')->delete();
|
// TEST DATA
|
||||||
|
/*
|
||||||
|
$contact = new Contact;
|
||||||
|
$contact->first_name = 'Hillel';
|
||||||
|
$contact->last_name = 'Hillel';
|
||||||
|
$contact->email = 'hillelcoren@gmail.com';
|
||||||
|
$contact->last_name = '2125551234';
|
||||||
|
$client->contacts()->save($contact);
|
||||||
|
|
||||||
|
$invoice = new Invoice;
|
||||||
|
$invoice->invoice_number = '0001';
|
||||||
|
$client->invoices()->save($invoice);
|
||||||
|
|
||||||
|
$invoice = new Invoice;
|
||||||
|
$invoice->invoice_number = '0002';
|
||||||
|
$client->invoices()->save($invoice);
|
||||||
|
|
||||||
|
$invoice = new Invoice;
|
||||||
|
$invoice->invoice_number = '0003';
|
||||||
|
$client->invoices()->save($invoice);
|
||||||
|
|
||||||
|
$invoice = new Invoice;
|
||||||
|
$invoice->invoice_number = '0004';
|
||||||
|
$client->invoices()->save($invoice);
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
InvoiceStatus::create(array('name' => 'Draft'));
|
||||||
|
InvoiceStatus::create(array('name' => 'Sent'));
|
||||||
|
InvoiceStatus::create(array('name' => 'Viewed'));
|
||||||
|
InvoiceStatus::create(array('name' => 'Partial'));
|
||||||
|
InvoiceStatus::create(array('name' => 'Paid'));
|
||||||
|
|
||||||
$gateways = [
|
$gateways = [
|
||||||
array('name'=>'Authorize.Net AIM', 'provider'=>'AuthorizeNet_AIM'),
|
array('name'=>'Authorize.Net AIM', 'provider'=>'AuthorizeNet_AIM'),
|
||||||
array('name'=>'Authorize.Net SIM', 'provider'=>'AuthorizeNet_SIM'),
|
array('name'=>'Authorize.Net SIM', 'provider'=>'AuthorizeNet_SIM'),
|
||||||
|
@ -81,11 +81,14 @@ Route::filter('csrf', function()
|
|||||||
$tokenInput = Input::get('_token');
|
$tokenInput = Input::get('_token');
|
||||||
$tokenSession = Session::token();
|
$tokenSession = Session::token();
|
||||||
|
|
||||||
|
/*
|
||||||
if ($url = Session::get($tokenInput))
|
if ($url = Session::get($tokenInput))
|
||||||
{
|
{
|
||||||
return Redirect::to($url);
|
return Redirect::to($url);
|
||||||
}
|
}
|
||||||
else if ($tokenSession != $tokenInput)
|
*/
|
||||||
|
|
||||||
|
if ($tokenSession != $tokenInput)
|
||||||
{
|
{
|
||||||
throw new Illuminate\Session\TokenMismatchException;
|
throw new Illuminate\Session\TokenMismatchException;
|
||||||
}
|
}
|
||||||
|
@ -22,12 +22,12 @@ class Activity extends Eloquent
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static function createClient($client)
|
public static function createClient($client)
|
||||||
{
|
{
|
||||||
$activity = Activity::getBlank();
|
$activity = Activity::getBlank();
|
||||||
$activity->client_id = $client->id;
|
$activity->client_id = $client->id;
|
||||||
$activity->activity_type_id = ACTIVITY_TYPE_CREATE_CLIENT;
|
$activity->activity_type_id = ACTIVITY_TYPE_CREATE_CLIENT;
|
||||||
$activity->message = Auth::user()->getFullName() . ' created client ' . $client->name;
|
$activity->message = Auth::user()->getFullName() . ' created client ' . $client->name;
|
||||||
$activity->save();
|
$activity->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function archiveClient($client)
|
public static function archiveClient($client)
|
||||||
|
@ -79,6 +79,19 @@ class Client extends Eloquent
|
|||||||
|
|
||||||
return $str;
|
return $str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getDateCreated()
|
||||||
|
{
|
||||||
|
if ($this->created_at == '0000-00-00 00:00:00')
|
||||||
|
{
|
||||||
|
return '---';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return $this->created_at->format('m/d/y h:i a');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Client::created(function($client)
|
Client::created(function($client)
|
||||||
|
@ -14,7 +14,7 @@ class Contact extends Eloquent
|
|||||||
return $this->belongsTo('Client');
|
return $this->belongsTo('Client');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function lastLogin()
|
public function getLastLogin()
|
||||||
{
|
{
|
||||||
if ($this->last_login == '0000-00-00 00:00:00')
|
if ($this->last_login == '0000-00-00 00:00:00')
|
||||||
{
|
{
|
||||||
@ -22,7 +22,7 @@ class Contact extends Eloquent
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return $this->last_login;
|
return $this->last_login->format('m/d/y h:i a');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,6 +14,11 @@ class Invoice extends Eloquent
|
|||||||
return $this->hasMany('InvoiceItem');
|
return $this->hasMany('InvoiceItem');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function invoice_status()
|
||||||
|
{
|
||||||
|
return $this->belongsTo('InvoiceStatus');
|
||||||
|
}
|
||||||
|
|
||||||
public function getTotal()
|
public function getTotal()
|
||||||
{
|
{
|
||||||
$total = 0;
|
$total = 0;
|
||||||
|
6
app/models/InvoiceStatus.php
Executable file
6
app/models/InvoiceStatus.php
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class InvoiceStatus extends Eloquent
|
||||||
|
{
|
||||||
|
public $timestamps = false;
|
||||||
|
}
|
@ -37,13 +37,16 @@ Route::group(array('before' => array('auth', 'csrf')), function()
|
|||||||
|
|
||||||
Route::resource('clients', 'ClientController');
|
Route::resource('clients', 'ClientController');
|
||||||
Route::get('api/clients', array('as'=>'api.clients', 'uses'=>'ClientController@getDatatable'));
|
Route::get('api/clients', array('as'=>'api.clients', 'uses'=>'ClientController@getDatatable'));
|
||||||
|
Route::post('clients/bulk', 'ClientController@bulk');
|
||||||
|
|
||||||
Route::resource('invoices', 'InvoiceController');
|
Route::resource('invoices', 'InvoiceController');
|
||||||
Route::get('api/invoices/{client_id?}', 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::post('invoices/bulk', 'InvoiceController@bulk');
|
||||||
|
|
||||||
Route::get('payments', 'PaymentController@index');
|
Route::get('payments', 'PaymentController@index');
|
||||||
Route::get('api/payments/{client_id?}', array('as'=>'api.payments', 'uses'=>'PaymentController@getDatatable'));
|
Route::get('api/payments/{client_id?}', array('as'=>'api.payments', 'uses'=>'PaymentController@getDatatable'));
|
||||||
|
Route::post('payments/bulk', 'PaymentController@bulk');
|
||||||
|
|
||||||
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'); });
|
||||||
@ -179,9 +182,9 @@ define("ENV_STAGING", "staging");
|
|||||||
define("ENV_PRODUCTION", "production");
|
define("ENV_PRODUCTION", "production");
|
||||||
|
|
||||||
define("RECENTLY_VIEWED", "RECENTLY_VIEWED");
|
define("RECENTLY_VIEWED", "RECENTLY_VIEWED");
|
||||||
define("ENTITY_CLIENT", "Client");
|
define("ENTITY_CLIENT", "client");
|
||||||
define("ENTITY_INVOICE", "Invoice");
|
define("ENTITY_INVOICE", "invoice");
|
||||||
define("ENTITY_PAYMENT", "Payment");
|
define("ENTITY_PAYMENT", "payment");
|
||||||
|
|
||||||
define("ACCOUNT_DETAILS", "details");
|
define("ACCOUNT_DETAILS", "details");
|
||||||
define("ACCOUNT_SETTINGS", "settings");
|
define("ACCOUNT_SETTINGS", "settings");
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
{{ Button::primary_link(URL::to('clients/create'), 'New Client', array('class' => 'pull-right')) }}
|
{{ Button::primary_link(URL::to('clients/create'), 'New Client', array('class' => 'pull-right')) }}
|
||||||
|
|
||||||
{{ Datatable::table()
|
{{ Datatable::table()
|
||||||
->addColumn('Client', 'Contact', 'Last Login', 'Email', 'Phone')
|
->addColumn('Client', 'Contact', 'Balance', 'Last Login', 'Date Created', 'Email', 'Phone')
|
||||||
->setUrl(route('api.clients'))
|
->setUrl(route('api.clients'))
|
||||||
->setOptions('sPaginationType', 'bootstrap')
|
->setOptions('sPaginationType', 'bootstrap')
|
||||||
->setOptions('bFilter', false)
|
->setOptions('bFilter', false)
|
||||||
|
55
app/views/datatable.blade.php
Executable file
55
app/views/datatable.blade.php
Executable file
@ -0,0 +1,55 @@
|
|||||||
|
<table class="table table-bordered {{ $class = str_random(8) }}">
|
||||||
|
<colgroup>
|
||||||
|
@for ($i = 0; $i < count($columns); $i++)
|
||||||
|
<col class="con{{ $i }}" />
|
||||||
|
@endfor
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
@foreach($columns as $i => $c)
|
||||||
|
<th align="center" valign="middle" class="head{{ $i }}">
|
||||||
|
@if ($c == 'checkbox' && $haeCheckboxes = true)
|
||||||
|
<input type="checkbox" id="selectAll"/>
|
||||||
|
@else
|
||||||
|
{{ $c }}
|
||||||
|
@endif
|
||||||
|
</th>
|
||||||
|
@endforeach
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach($data as $d)
|
||||||
|
<tr>
|
||||||
|
@foreach($d as $dd)
|
||||||
|
<td>{{ $dd }}</td>
|
||||||
|
@endforeach
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(document).ready(function(){
|
||||||
|
// dynamic table
|
||||||
|
jQuery('.{{ $class }}').dataTable({
|
||||||
|
// Disable sorting on the first column
|
||||||
|
@if ($haeCheckboxes)
|
||||||
|
"aoColumnDefs" : [ {
|
||||||
|
'bSortable' : false,
|
||||||
|
'aTargets' : [ 0 ]
|
||||||
|
} ],
|
||||||
|
@endif
|
||||||
|
@foreach ($options as $k => $o)
|
||||||
|
{{ json_encode($k) }}: {{ json_encode($o) }},
|
||||||
|
@endforeach
|
||||||
|
@foreach ($callbacks as $k => $o)
|
||||||
|
{{ json_encode($k) }}: {{ $o }},
|
||||||
|
@endforeach
|
||||||
|
"fnDrawCallback": function(oSettings) {
|
||||||
|
//jQuery.uniform.update();
|
||||||
|
if (window.onDatatableReady) {
|
||||||
|
window.onDatatableReady();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
@ -37,7 +37,6 @@
|
|||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="{{ asset('css/jquery.dataTables.css') }}">
|
<link rel="stylesheet" type="text/css" href="{{ asset('css/jquery.dataTables.css') }}">
|
||||||
<script type="text/javascript" src="{{ asset('js/jquery.dataTables.js') }}"></script>
|
<script type="text/javascript" src="{{ asset('js/jquery.dataTables.js') }}"></script>
|
||||||
<script type="text/javascript" src="{{ asset('js/jquery.dataTables.js') }}"></script>
|
|
||||||
<script type="text/javascript" src="{{ asset('js/knockout-3.0.0.js') }}"></script>
|
<script type="text/javascript" src="{{ asset('js/knockout-3.0.0.js') }}"></script>
|
||||||
<script type="text/javascript" src="{{ asset('js/knockout.mapping-latest.js') }}"></script>
|
<script type="text/javascript" src="{{ asset('js/knockout.mapping-latest.js') }}"></script>
|
||||||
<script src="{{ asset('js/knockout-sortable.js') }}" type="text/javascript"></script>
|
<script src="{{ asset('js/knockout-sortable.js') }}" type="text/javascript"></script>
|
||||||
@ -51,13 +50,6 @@
|
|||||||
|
|
||||||
<script src="{{ asset('js/script.js') }}" type="text/javascript"></script>
|
<script src="{{ asset('js/script.js') }}" type="text/javascript"></script>
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
$(function() {
|
|
||||||
@yield('onReady')
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
|
|
||||||
|
|
||||||
@ -110,7 +102,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
div.dataTables_paginate.paging_bootstrap {
|
div.dataTables_paginate.paging_bootstrap {
|
||||||
margin-top: -30px;
|
margin-top: -20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.table tbody tr.odd {
|
table.table tbody tr.odd {
|
||||||
@ -312,6 +304,7 @@
|
|||||||
}
|
}
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
|
@yield('onReady')
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -26,8 +26,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-md-5">
|
<div class="col-md-5">
|
||||||
{{ Former::text('invoice_number')->label('Invoice #') }}
|
{{ Former::text('invoice_number')->label('Invoice #') }}
|
||||||
{{ Former::text('invoice_date') }}
|
{{ Former::text('invoice_date')->label('Invoice Date') }}
|
||||||
{{ Former::text('due_date') }}
|
{{ Former::text('due_date')->label('Due Date') }}
|
||||||
{{-- Former::text('discount')->data_bind("value: discount, valueUpdate: 'afterkeydown'") --}}
|
{{-- Former::text('discount')->data_bind("value: discount, valueUpdate: 'afterkeydown'") --}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -2,13 +2,70 @@
|
|||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
|
|
||||||
|
{{ Former::open('invoices/action') }}
|
||||||
|
<div style="display:none">{{ Former::text('action') }}</div>
|
||||||
|
|
||||||
|
{{ DropdownButton::normal('Archive',
|
||||||
|
Navigation::links(
|
||||||
|
array(
|
||||||
|
array('Archive', "javascript:submitForm('archive')"),
|
||||||
|
array('Delete', "javascript:submitForm('delete')"),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
, array('id'=>'archive'))->split(); }}
|
||||||
|
|
||||||
|
|
||||||
{{ 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('Invoice Number', 'Client', 'Amount', 'Date')
|
->addColumn('checkbox', 'Invoice Number', 'Client', 'Total', 'Amount Due', 'Invoice Date', 'Due Date', 'Status')
|
||||||
->setUrl(route('api.invoices'))
|
->setUrl(route('api.invoices'))
|
||||||
->setOptions('sPaginationType', 'bootstrap')
|
->setOptions('sPaginationType', 'bootstrap')
|
||||||
->setOptions('bFilter', false)
|
->setOptions('bFilter', false)
|
||||||
->render() }}
|
->render('datatable') }}
|
||||||
|
|
||||||
|
{{ Former::close() }}
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function submitForm(action) {
|
||||||
|
$('#action').val(action);
|
||||||
|
$('form').submit();
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
@stop
|
||||||
|
|
||||||
|
@section('onReady')
|
||||||
|
|
||||||
|
window.onDatatableReady = function() {
|
||||||
|
$(':checkbox').click(function() {
|
||||||
|
setArchiveEnabled();
|
||||||
|
});
|
||||||
|
|
||||||
|
$('tbody tr').click(function() {
|
||||||
|
$checkbox = $(this).closest('tr').find(':checkbox');
|
||||||
|
var checked = $checkbox.prop('checked');
|
||||||
|
$checkbox.prop('checked', !checked);
|
||||||
|
setArchiveEnabled();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#archive > button').prop('disabled', true);
|
||||||
|
$('#archive > button:first').click(function() {
|
||||||
|
submitForm('archive');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#selectAll').click(function() {
|
||||||
|
$(':checkbox').prop('checked', this.checked);
|
||||||
|
});
|
||||||
|
|
||||||
|
function setArchiveEnabled() {
|
||||||
|
var checked = $('tbody :checkbox:checked').length > 0;
|
||||||
|
$('#archive > button').prop('disabled', !checked);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@stop
|
@stop
|
73
app/views/list.blade.php
Executable file
73
app/views/list.blade.php
Executable file
@ -0,0 +1,73 @@
|
|||||||
|
@extends('header')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
{{ Former::open($entityType . 's/bulk') }}
|
||||||
|
<div style="display:none">{{ Former::text('action') }}</div>
|
||||||
|
|
||||||
|
{{ DropdownButton::normal('Archive',
|
||||||
|
Navigation::links(
|
||||||
|
array(
|
||||||
|
array('Archive', "javascript:submitForm('archive')"),
|
||||||
|
array('Delete', "javascript:submitForm('delete')"),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
, array('id'=>'archive'))->split(); }}
|
||||||
|
|
||||||
|
|
||||||
|
{{ Button::primary_link(URL::to($entityType . 's/create'), 'New ' . ucwords($entityType), array('class' => 'pull-right')) }}
|
||||||
|
|
||||||
|
|
||||||
|
{{ Datatable::table()
|
||||||
|
->addColumn($columns)
|
||||||
|
->setUrl(route('api.' . $entityType . 's'))
|
||||||
|
->setOptions('sPaginationType', 'bootstrap')
|
||||||
|
->setOptions('bFilter', false)
|
||||||
|
->render('datatable') }}
|
||||||
|
|
||||||
|
{{ Former::close() }}
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function submitForm(action) {
|
||||||
|
$('#action').val(action);
|
||||||
|
$('form').submit();
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
@stop
|
||||||
|
|
||||||
|
@section('onReady')
|
||||||
|
|
||||||
|
window.onDatatableReady = function() {
|
||||||
|
$(':checkbox').click(function() {
|
||||||
|
setArchiveEnabled();
|
||||||
|
});
|
||||||
|
|
||||||
|
$('tbody tr').click(function(event) {
|
||||||
|
if (event.target.type !== 'checkbox') {
|
||||||
|
$checkbox = $(this).closest('tr').find(':checkbox');
|
||||||
|
var checked = $checkbox.prop('checked');
|
||||||
|
$checkbox.prop('checked', !checked);
|
||||||
|
setArchiveEnabled();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#archive > button').prop('disabled', true);
|
||||||
|
$('#archive > button:first').click(function() {
|
||||||
|
submitForm('archive');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#selectAll').click(function() {
|
||||||
|
$(':checkbox').prop('checked', this.checked);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
function setArchiveEnabled() {
|
||||||
|
var checked = $('tbody :checkbox:checked').length > 0;
|
||||||
|
$('#archive > button').prop('disabled', !checked);
|
||||||
|
}
|
||||||
|
|
||||||
|
@stop
|
2002
public/js/bootstrap.js
vendored
Executable file
2002
public/js/bootstrap.js
vendored
Executable file
File diff suppressed because it is too large
Load Diff
@ -126,16 +126,12 @@ function formatMoney(num) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Set the defaults for DataTables initialisation */
|
/* Set the defaults for DataTables initialisation */
|
||||||
$.extend( true, $.fn.dataTable.defaults, {
|
$.extend( true, $.fn.dataTable.defaults, {
|
||||||
"sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
|
"sDom": "t<'row-fluid'<'span6'l><'span6'p>>",
|
||||||
"sPaginationType": "bootstrap",
|
"sPaginationType": "bootstrap",
|
||||||
|
"bProcessing": false,
|
||||||
|
"bInfo": false,
|
||||||
"oLanguage": {
|
"oLanguage": {
|
||||||
"sLengthMenu": "_MENU_ records per page"
|
"sLengthMenu": "_MENU_ records per page"
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user