mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-11-04 02:57:33 -05:00 
			
		
		
		
	Added support for themes
This commit is contained in:
		
							parent
							
								
									4f099c1fa5
								
							
						
					
					
						commit
						ebdfa54489
					
				@ -30,8 +30,7 @@ Install packages using Composer
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Configure config/database.php and then initialize the database
 | 
					Configure config/database.php and then initialize the database
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    php artisan migrate
 | 
					    php artisan migrate --seed
 | 
				
			||||||
    php artisan db:seed
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Frameworks/Libraries
 | 
					### Frameworks/Libraries
 | 
				
			||||||
@ -56,3 +55,4 @@ Configure config/database.php and then initialize the database
 | 
				
			|||||||
* [Intervention/image](https://github.com/Intervention/image) - PHP Image Manipulation
 | 
					* [Intervention/image](https://github.com/Intervention/image) - PHP Image Manipulation
 | 
				
			||||||
* [webpatser/laravel-countries](https://github.com/webpatser/laravel-countries) - Almost ISO 3166_2, 3166_3, currency, Capital and more for all countries
 | 
					* [webpatser/laravel-countries](https://github.com/webpatser/laravel-countries) - Almost ISO 3166_2, 3166_3, currency, Capital and more for all countries
 | 
				
			||||||
* [briannesbitt/Carbon](https://github.com/briannesbitt/Carbon) - A simple API extension for DateTime with PHP 5.3+
 | 
					* [briannesbitt/Carbon](https://github.com/briannesbitt/Carbon) - A simple API extension for DateTime with PHP 5.3+
 | 
				
			||||||
 | 
					* [thomaspark/bootswatch](https://github.com/thomaspark/bootswatch) - Themes for Bootstrap
 | 
				
			||||||
@ -9,7 +9,7 @@ return array(
 | 
				
			|||||||
			'host'      => 'localhost',
 | 
								'host'      => 'localhost',
 | 
				
			||||||
			'database'  => 'ninja',
 | 
								'database'  => 'ninja',
 | 
				
			||||||
			'username'  => 'ninja',
 | 
								'username'  => 'ninja',
 | 
				
			||||||
			'password'  => '1234',
 | 
								'password'  => 'ninja',
 | 
				
			||||||
			'charset'   => 'utf8',
 | 
								'charset'   => 'utf8',
 | 
				
			||||||
			'collation' => 'utf8_unicode_ci',
 | 
								'collation' => 'utf8_unicode_ci',
 | 
				
			||||||
			'prefix'    => '',
 | 
								'prefix'    => '',
 | 
				
			||||||
 | 
				
			|||||||
@ -181,9 +181,8 @@ class AccountController extends \BaseController {
 | 
				
			|||||||
				continue;
 | 
									continue;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			$client = new Client;			
 | 
								$client = Client::createNew();		
 | 
				
			||||||
			$client->account_id = Auth::user()->account_id;
 | 
								$contact = Contact::createNew();
 | 
				
			||||||
			$contact = new Contact;
 | 
					 | 
				
			||||||
			$count++;
 | 
								$count++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			foreach ($row as $index => $value)
 | 
								foreach ($row as $index => $value)
 | 
				
			||||||
 | 
				
			|||||||
@ -21,20 +21,20 @@ class ClientController extends \BaseController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	public function getDatatable()
 | 
						public function getDatatable()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
    	$clients = Client::scope()->with('contacts')->get();
 | 
					    	$query = DB::table('clients')->join('contacts', 'clients.id', '=','contacts.client_id')->where('contacts.is_primary', '=', true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return Datatable::collection($clients)
 | 
					        return Datatable::query($query)
 | 
				
			||||||
    	    ->addColumn('checkbox', function($model) { return '<input type="checkbox" name="ids[]" value="' . $model->public_id . '">'; })
 | 
					    	    ->addColumn('checkbox', function($model) { return '<input type="checkbox" name="ids[]" value="' . $model->public_id . '">'; })
 | 
				
			||||||
    	    ->addColumn('name', function($model) { return link_to('clients/' . $model->public_id, $model->name); })
 | 
					    	    ->addColumn('name', function($model) { return link_to('clients/' . $model->public_id, $model->name); })
 | 
				
			||||||
    	    ->addColumn('contact', function($model) { return $model->contacts[0]->getFullName(); })
 | 
					    	    ->addColumn('first_name', function($model) { return $model->first_name . ' ' . $model->last_name; })
 | 
				
			||||||
    	    ->addColumn('balance', function($model) { return '$' . $model->balance; })    	    
 | 
					    	    ->addColumn('balance', function($model) { return '$' . $model->balance; })    	    
 | 
				
			||||||
    	    ->addColumn('last_login', function($model) { return $model->contacts[0]->getLastLogin(); })
 | 
					    	    ->addColumn('clients.last_login', function($model) { return timestampToDateString($model->last_login); })
 | 
				
			||||||
    	    ->addColumn('date_created', function($model) { return $model->created_at->toFormattedDateString(); })
 | 
					    	    ->addColumn('clients.created_at', function($model) { return timestampToDateString($model->created_at); })
 | 
				
			||||||
    	    ->addColumn('email', function($model) { return HTML::mailto($model->contacts[0]->email, $model->contacts[0]->email); })
 | 
					    	    ->addColumn('email', function($model) { return HTML::mailto($model->email, $model->email); })
 | 
				
			||||||
    	    ->addColumn('phone', function($model) { return $model->contacts[0]->phone; })    	   
 | 
					    	    ->addColumn('phone', function($model) { return $model->phone; })    	   
 | 
				
			||||||
    	    ->addColumn('dropdown', function($model) 
 | 
					    	    ->addColumn('dropdown', function($model) 
 | 
				
			||||||
    	    { 
 | 
					    	    { 
 | 
				
			||||||
    	    	return '<div class="btn-group tr-action" style="display:none">
 | 
					    	    	return '<div class="btn-group tr-action" style="visibility:hidden;">
 | 
				
			||||||
  							<button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown">
 | 
					  							<button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown">
 | 
				
			||||||
    							Select <span class="caret"></span>
 | 
					    							Select <span class="caret"></span>
 | 
				
			||||||
  							</button>
 | 
					  							</button>
 | 
				
			||||||
@ -42,12 +42,12 @@ class ClientController extends \BaseController {
 | 
				
			|||||||
  							<li><a href="' . URL::to('invoices/create/'.$model->public_id) . '">New Invoice</a></li>						    
 | 
					  							<li><a href="' . URL::to('invoices/create/'.$model->public_id) . '">New Invoice</a></li>						    
 | 
				
			||||||
						    <li><a href="' . URL::to('clients/'.$model->public_id.'/edit') . '">Edit Client</a></li>
 | 
											    <li><a href="' . URL::to('clients/'.$model->public_id.'/edit') . '">Edit Client</a></li>
 | 
				
			||||||
						    <li class="divider"></li>
 | 
											    <li class="divider"></li>
 | 
				
			||||||
						    <li><a href="' . URL::to('clients/'.$model->public_id.'/archive') . '">Archive Client</a></li>
 | 
											    <li><a href="javascript:archiveEntity(' . $model->public_id. ')">Archive Client</a></li>
 | 
				
			||||||
						    <li><a href="javascript:deleteEntity(' . $model->public_id. ')">Delete Client</a></li>						    
 | 
											    <li><a href="javascript:deleteEntity(' . $model->public_id. ')">Delete Client</a></li>						    
 | 
				
			||||||
						  </ul>
 | 
											  </ul>
 | 
				
			||||||
						</div>';
 | 
											</div>';
 | 
				
			||||||
    	    })    	   
 | 
					    	    })    	   
 | 
				
			||||||
    	    ->orderColumns('name')
 | 
					    	    ->orderColumns('name','first_name','balance','clients.last_login','clients.created_at','email','phone')
 | 
				
			||||||
    	    ->make();    	    
 | 
					    	    ->make();    	    
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -133,7 +133,8 @@ class ClientController extends \BaseController {
 | 
				
			|||||||
		$validator = Validator::make(Input::all(), $rules);
 | 
							$validator = Validator::make(Input::all(), $rules);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ($validator->fails()) {
 | 
							if ($validator->fails()) {
 | 
				
			||||||
			return Redirect::to('clients/' . $publicId . '/edit')
 | 
								$url = $publicId ? 'clients/' . $publicId . '/edit' : 'clients/create';
 | 
				
			||||||
 | 
								return Redirect::to($url)
 | 
				
			||||||
				->withErrors($validator)
 | 
									->withErrors($validator)
 | 
				
			||||||
				->withInput(Input::except('password'));
 | 
									->withInput(Input::except('password'));
 | 
				
			||||||
		} else {			
 | 
							} else {			
 | 
				
			||||||
@ -158,12 +159,13 @@ class ClientController extends \BaseController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			$data = json_decode(Input::get('data'));
 | 
								$data = json_decode(Input::get('data'));
 | 
				
			||||||
			$contactIds = [];
 | 
								$contactIds = [];
 | 
				
			||||||
 | 
								$isPrimary = true;
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			foreach ($data->contacts as $contact)
 | 
								foreach ($data->contacts as $contact)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				if (isset($contact->id) && $contact->id)
 | 
									if (isset($contact->public_id) && $contact->public_id)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					$record = Contact::scope($contact->id)->firstOrFail();
 | 
										$record = Contact::scope($contact->public_id)->firstOrFail();
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
@ -174,14 +176,16 @@ class ClientController extends \BaseController {
 | 
				
			|||||||
				$record->first_name = $contact->first_name;
 | 
									$record->first_name = $contact->first_name;
 | 
				
			||||||
				$record->last_name = $contact->last_name;
 | 
									$record->last_name = $contact->last_name;
 | 
				
			||||||
				$record->phone = $contact->phone;
 | 
									$record->phone = $contact->phone;
 | 
				
			||||||
 | 
									$record->is_primary = $isPrimary;
 | 
				
			||||||
 | 
									$isPrimary = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				$client->contacts()->save($record);
 | 
									$client->contacts()->save($record);
 | 
				
			||||||
				$contactIds[] = $record->id;					
 | 
									$contactIds[] = $record->public_id;					
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			foreach ($client->contacts as $contact)
 | 
								foreach ($client->contacts as $contact)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				if (!in_array($contact->id, $contactIds))
 | 
									if (!in_array($contact->public_id, $contactIds))
 | 
				
			||||||
				{	
 | 
									{	
 | 
				
			||||||
					$contact->forceDelete();
 | 
										$contact->forceDelete();
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
@ -197,6 +201,7 @@ class ClientController extends \BaseController {
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		$action = Input::get('action');
 | 
							$action = Input::get('action');
 | 
				
			||||||
		$ids = Input::get('ids') ? Input::get('ids') : [Input::get('id')];
 | 
							$ids = Input::get('ids') ? Input::get('ids') : [Input::get('id')];
 | 
				
			||||||
 | 
							
 | 
				
			||||||
		$clients = Client::scope($ids)->get();
 | 
							$clients = Client::scope($ids)->get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		foreach ($clients as $client) {
 | 
							foreach ($clients as $client) {
 | 
				
			||||||
@ -212,27 +217,4 @@ class ClientController extends \BaseController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		return Redirect::to('clients');
 | 
							return Redirect::to('clients');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	public function archive($publicId)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		$client = Client::scope($publicId)->firstOrFail();
 | 
					 | 
				
			||||||
		$client->delete();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		foreach ($client->invoices as $invoice)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			$invoice->delete();
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		Session::flash('message', 'Successfully archived ' . $client->name);
 | 
					 | 
				
			||||||
		return Redirect::to('clients');		
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	public function delete($id)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		$client = Client::scope($publicId)->firstOrFail();
 | 
					 | 
				
			||||||
		$client->forceDelete();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		Session::flash('message', 'Successfully deleted ' . $client->name);
 | 
					 | 
				
			||||||
		return Redirect::to('clients');		
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -12,7 +12,7 @@ class CreditController extends \BaseController {
 | 
				
			|||||||
        return View::make('list', array(
 | 
					        return View::make('list', array(
 | 
				
			||||||
            'entityType'=>ENTITY_CREDIT, 
 | 
					            'entityType'=>ENTITY_CREDIT, 
 | 
				
			||||||
            'title' => '- Credits',
 | 
					            'title' => '- Credits',
 | 
				
			||||||
            'columns'=>['checkbox', 'Credit Number', 'Client', 'Amount', 'Credit Date']
 | 
					            'columns'=>['checkbox', 'Client', 'Amount', 'Credit Date', 'Action']
 | 
				
			||||||
        ));
 | 
					        ));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -28,36 +28,115 @@ class CreditController extends \BaseController {
 | 
				
			|||||||
        $table = Datatable::collection($collection->get());
 | 
					        $table = Datatable::collection($collection->get());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!$clientPublicId) {
 | 
					        if (!$clientPublicId) {
 | 
				
			||||||
            $table->addColumn('checkbox', function($model) { return '<input type="checkbox" name="ids[]" value="' . $model->public_id . '">'; });
 | 
					            $table->addColumn('checkbox', function($model) { return '<input type="checkbox" name="ids[]" value="' . $model->public_id . '">'; })
 | 
				
			||||||
        }
 | 
					                  ->addColumn('client', function($model) { return link_to('clients/' . $model->client->public_id, $model->client->name); });
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        $table->addColumn('credit_number', function($model) { return $model->credit_number; });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (!$clientPublicId) {
 | 
					 | 
				
			||||||
            $table->addColumn('client', function($model) { return link_to('clients/' . $model->client->public_id, $model->client->name); });
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        return $table->addColumn('amount', function($model){ return '$' . money_format('%i', $model->amount); })
 | 
					        return $table->addColumn('amount', function($model){ return '$' . money_format('%i', $model->amount); })
 | 
				
			||||||
            ->addColumn('credit_date', function($model) { return (new Carbon($model->credit_date))->toFormattedDateString(); })
 | 
					            ->addColumn('credit_date', function($model) { return (new Carbon($model->credit_date))->toFormattedDateString(); })
 | 
				
			||||||
            ->orderColumns('number')
 | 
					            ->addColumn('dropdown', function($model) 
 | 
				
			||||||
 | 
					            { 
 | 
				
			||||||
 | 
					                return '<div class="btn-group tr-action" style="display:none">
 | 
				
			||||||
 | 
					                            <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown">
 | 
				
			||||||
 | 
					                                Select <span class="caret"></span>
 | 
				
			||||||
 | 
					                            </button>
 | 
				
			||||||
 | 
					                            <ul class="dropdown-menu" role="menu">
 | 
				
			||||||
 | 
					                            <li><a href="' . URL::to('credits/'.$model->public_id.'/edit') . '">Edit Credit</a></li>
 | 
				
			||||||
 | 
					                            <li class="divider"></li>
 | 
				
			||||||
 | 
					                            <li><a href="' . URL::to('credits/'.$model->public_id.'/archive') . '">Archive Credit</a></li>
 | 
				
			||||||
 | 
					                            <li><a href="javascript:deleteEntity(' . $model->public_id. ')">Delete Credit</a></li>                          
 | 
				
			||||||
 | 
					                          </ul>
 | 
				
			||||||
 | 
					                        </div>';
 | 
				
			||||||
 | 
					            })         
 | 
				
			||||||
 | 
					           ->orderColumns('number')
 | 
				
			||||||
            ->make();       
 | 
					            ->make();       
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function archive($publicId)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        $credit = Credit::scope($publicId)->firstOrFail();
 | 
					 | 
				
			||||||
        $creidt->delete();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Session::flash('message', 'Successfully archived credit ' . $credit->credit_number);
 | 
					    public function create()
 | 
				
			||||||
        return Redirect::to('credits');     
 | 
					    {       
 | 
				
			||||||
 | 
					        $data = array(
 | 
				
			||||||
 | 
					            'client' => null,
 | 
				
			||||||
 | 
					            'credit' => null, 
 | 
				
			||||||
 | 
					            'method' => 'POST', 
 | 
				
			||||||
 | 
					            'url' => 'credits', 
 | 
				
			||||||
 | 
					            'title' => '- New Credit',
 | 
				
			||||||
 | 
					            'clients' => Client::scope()->orderBy('name')->get());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return View::make('credits.edit', $data);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function delete($publicId)
 | 
					    public function edit($publicId)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $credit = Credit::scope($publicId)->firstOrFail();
 | 
					        $credit = Credit::scope($publicId)->firstOrFail();
 | 
				
			||||||
        $credit->forceDelete();
 | 
					        $data = array(
 | 
				
			||||||
 | 
					            'client' => null,
 | 
				
			||||||
 | 
					            'credit' => $credit, 
 | 
				
			||||||
 | 
					            'method' => 'PUT', 
 | 
				
			||||||
 | 
					            'url' => 'credits/' . $publicId, 
 | 
				
			||||||
 | 
					            'title' => '- Edit Credit',
 | 
				
			||||||
 | 
					            'clients' => Client::scope()->orderBy('name')->get());
 | 
				
			||||||
 | 
					        return View::make('credit.edit', $data);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function store()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return $this->save();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function update($publicId)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return $this->save($publicId);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private function save($publicId = null)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $rules = array(
 | 
				
			||||||
 | 
					            'client' => 'required',
 | 
				
			||||||
 | 
					            'amount' => 'required'
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					        $validator = Validator::make(Input::all(), $rules);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($validator->fails()) {
 | 
				
			||||||
 | 
					            $url = $publicId ? 'credits/' . $publicId . '/edit' : 'credits/create';
 | 
				
			||||||
 | 
					            return Redirect::to($url)
 | 
				
			||||||
 | 
					                ->withErrors($validator)
 | 
				
			||||||
 | 
					                ->withInput();
 | 
				
			||||||
 | 
					        } else {            
 | 
				
			||||||
 | 
					            if ($publicId) {
 | 
				
			||||||
 | 
					                $credit = Credit::scope($publicId)->firstOrFail();
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                $credit = Credit::createNew();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $credit->client_id = Input::get('client');
 | 
				
			||||||
 | 
					            $credit->credit_date = toSqlDate(Input::get('credit_date'));
 | 
				
			||||||
 | 
					            $credit->amount = Input::get('amount');
 | 
				
			||||||
 | 
					            $credit->save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $message = $publicId ? 'Successfully updated credit' : 'Successfully created credit';
 | 
				
			||||||
 | 
					            Session::flash('message', $message);
 | 
				
			||||||
 | 
					            return Redirect::to('clients/' . $credit->client_id);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function bulk()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $action = Input::get('action');
 | 
				
			||||||
 | 
					        $ids = Input::get('ids');
 | 
				
			||||||
 | 
					        $credits = Credit::scope($ids)->get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        foreach ($credits as $credit) {
 | 
				
			||||||
 | 
					            if ($action == 'archive') {
 | 
				
			||||||
 | 
					                $credit->delete();
 | 
				
			||||||
 | 
					            } else if ($action == 'delete') {
 | 
				
			||||||
 | 
					                $credit->forceDelete();
 | 
				
			||||||
 | 
					            } 
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $message = pluralize('Successfully '.$action.'d ? credit', count($ids));
 | 
				
			||||||
 | 
					        Session::flash('message', $message);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Session::flash('message', 'Successfully deleted credit ' . $credit->credit_number);
 | 
					 | 
				
			||||||
        return Redirect::to('credits');
 | 
					        return Redirect::to('credits');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -18,14 +18,20 @@ class InvoiceController extends \BaseController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	public function getDatatable($clientPublicId = null)
 | 
						public function getDatatable($clientPublicId = null)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
    	$collection = Invoice::scope()->with('client','invoice_items','invoice_status');
 | 
					    	$query = DB::table('invoices')
 | 
				
			||||||
 | 
					    				->join('clients', 'clients.id', '=','invoices.client_id')
 | 
				
			||||||
 | 
										->join('invoice_statuses', 'invoice_statuses.id', '=', 'invoices.invoice_status_id');
 | 
				
			||||||
 | 
										//->select('clients.public_id as client_public_id', 'invoice_number', 'clients.name', 'invoices.public_id', 'total', 'invoices.balance', 'invoice_date', 'due_date');
 | 
				
			||||||
 | 
							//dd($query->get());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    	if ($clientPublicId) {
 | 
					    	if ($clientPublicId) {
 | 
				
			||||||
    		$clientId = Client::getPrivateId($clientPublicId);
 | 
					    		$query->where('clients.public_id', '=', $clientPublicId);
 | 
				
			||||||
    		$collection->where('client_id','=',$clientId);
 | 
					    		//$clientId = Client::getPrivateId($clientPublicId);
 | 
				
			||||||
 | 
					    		//$collection->where('client_id','=',$clientId);
 | 
				
			||||||
    	}
 | 
					    	}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    	$table = Datatable::collection($collection->get());
 | 
					    	$table = Datatable::query($query);
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    	if (!$clientPublicId) {
 | 
					    	if (!$clientPublicId) {
 | 
				
			||||||
    		$table->addColumn('checkbox', function($model) { return '<input type="checkbox" name="ids[]" value="' . $model->public_id . '">'; });
 | 
					    		$table->addColumn('checkbox', function($model) { return '<input type="checkbox" name="ids[]" value="' . $model->public_id . '">'; });
 | 
				
			||||||
@ -34,14 +40,14 @@ class InvoiceController extends \BaseController {
 | 
				
			|||||||
    	$table->addColumn('invoice_number', function($model) { return link_to('invoices/' . $model->public_id . '/edit', $model->invoice_number); });
 | 
					    	$table->addColumn('invoice_number', function($model) { return link_to('invoices/' . $model->public_id . '/edit', $model->invoice_number); });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    	if (!$clientPublicId) {
 | 
					    	if (!$clientPublicId) {
 | 
				
			||||||
    		$table->addColumn('client', function($model) { return link_to('clients/' . $model->client->public_id, $model->client->name); });
 | 
					    		//$table->addColumn('client', function($model) { dd($model); return link_to('clients/' . $model->client_public_id, $model->client_name); });
 | 
				
			||||||
    	}
 | 
					    	}
 | 
				
			||||||
    	
 | 
					    	
 | 
				
			||||||
    	return $table->addColumn('total', function($model){ return '$' . money_format('%i', $model->getTotal()); })
 | 
					    	return $table->addColumn('total', function($model){ return '$' . money_format('%i', $model->total); })
 | 
				
			||||||
    		->addColumn('amount_due', function($model) { return '$' . money_format('%i', $model->getTotal()); })
 | 
					    		->addColumn('invoices.balance', function($model) { return '$' . money_format('%i', $model->balance); })
 | 
				
			||||||
    	    ->addColumn('invoice_date', function($model) { return fromSqlDate($model->invoice_date); })
 | 
					    	    ->addColumn('invoice_date', function($model) { return fromSqlDate($model->invoice_date); })
 | 
				
			||||||
    	    ->addColumn('due_date', function($model) { return fromSqlDate($model->due_date); })
 | 
					    	    ->addColumn('due_date', function($model) { return fromSqlDate($model->due_date); })
 | 
				
			||||||
    	    ->addColumn('status', function($model) { return $model->invoice_status->name; })
 | 
					    	    //->addColumn('status', function($model) { return $model->invoice_status->name; })
 | 
				
			||||||
    	    ->addColumn('dropdown', function($model) 
 | 
					    	    ->addColumn('dropdown', function($model) 
 | 
				
			||||||
    	    { 
 | 
					    	    { 
 | 
				
			||||||
    	    	return '<div class="btn-group tr-action" style="display:none">
 | 
					    	    	return '<div class="btn-group tr-action" style="display:none">
 | 
				
			||||||
@ -442,22 +448,3 @@ class InvoiceController extends \BaseController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		return Redirect::to('invoices');
 | 
							return Redirect::to('invoices');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	public function archive($publicId)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		$invoice = Invoice::scope($publicId)->firstOrFail();
 | 
					 | 
				
			||||||
		$invoice->delete();
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		Session::flash('message', 'Successfully archived invoice ' . $invoice->invoice_number);
 | 
					 | 
				
			||||||
		return Redirect::to('invoices');		
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	public function delete($publicId)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		$invoice = Invoice::scope($publicId)->firstOrFail();
 | 
					 | 
				
			||||||
		$invoice->forceDelete();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		Session::flash('message', 'Successfully deleted invoice ' . $invoice->invoice_number);
 | 
					 | 
				
			||||||
		return Redirect::to('invoices');		
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -7,13 +7,13 @@ class PaymentController extends \BaseController
 | 
				
			|||||||
        return View::make('list', array(
 | 
					        return View::make('list', array(
 | 
				
			||||||
            'entityType'=>ENTITY_PAYMENT, 
 | 
					            'entityType'=>ENTITY_PAYMENT, 
 | 
				
			||||||
            'title' => '- Payments',
 | 
					            'title' => '- Payments',
 | 
				
			||||||
            'columns'=>['checkbox', 'Transaction Reference', 'Client', 'Amount', 'Payment Date']
 | 
					            'columns'=>['checkbox', 'Transaction Reference', 'Client', 'Invoice', 'Amount', 'Payment Date', 'Action']
 | 
				
			||||||
        ));
 | 
					        ));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public function getDatatable($clientPublicId = null)
 | 
						public function getDatatable($clientPublicId = null)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $collection = Payment::scope()->with('invoice.client');
 | 
					        $collection = Payment::scope()->with('invoice', 'client');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($clientPublicId) {
 | 
					        if ($clientPublicId) {
 | 
				
			||||||
            $clientId = Client::getPrivateId($clientPublicId);
 | 
					            $clientId = Client::getPrivateId($clientPublicId);
 | 
				
			||||||
@ -26,14 +26,29 @@ class PaymentController extends \BaseController
 | 
				
			|||||||
            $table->addColumn('checkbox', function($model) { return '<input type="checkbox" name="ids[]" value="' . $model->public_id . '">'; });
 | 
					            $table->addColumn('checkbox', function($model) { return '<input type="checkbox" name="ids[]" value="' . $model->public_id . '">'; });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $table->addColumn('transaction_reference', function($model) { return $model->transaction_reference; });
 | 
					        $table->addColumn('transaction_reference', function($model) { return $model->transaction_reference ? $model->transaction_reference : '<i>Manual entry</i>'; });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!$clientPublicId) {
 | 
					        if (!$clientPublicId) {
 | 
				
			||||||
            $table->addColumn('client', function($model) { return link_to('clients/' . $model->client->public_id, $model->client->name); });
 | 
					            $table->addColumn('client', function($model) { return link_to('clients/' . $model->client->public_id, $model->client->name); });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $table->addColumn('amount', function($model) { return '$' . $model->amount; })
 | 
					        return $table->addColumn('invoice_number', function($model) { return $model->invoice ? link_to('invoices/' . $model->invoice->public_id . '/edit', $model->invoice->invoice_number) : ''; })
 | 
				
			||||||
 | 
					            ->addColumn('amount', function($model) { return '$' . $model->amount; })
 | 
				
			||||||
    	    ->addColumn('date', function($model) { return timestampToDateTimeString($model->created_at); })
 | 
					    	    ->addColumn('date', function($model) { return timestampToDateTimeString($model->created_at); })
 | 
				
			||||||
 | 
					            ->addColumn('dropdown', function($model) 
 | 
				
			||||||
 | 
					            { 
 | 
				
			||||||
 | 
					                return '<div class="btn-group tr-action" style="display:none">
 | 
				
			||||||
 | 
					                            <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown">
 | 
				
			||||||
 | 
					                                Select <span class="caret"></span>
 | 
				
			||||||
 | 
					                            </button>
 | 
				
			||||||
 | 
					                            <ul class="dropdown-menu" role="menu">
 | 
				
			||||||
 | 
					                            <li><a href="' . URL::to('payments/'.$model->public_id.'/edit') . '">Edit Payment</a></li>
 | 
				
			||||||
 | 
					                            <li class="divider"></li>
 | 
				
			||||||
 | 
					                            <li><a href="' . URL::to('payments/'.$model->public_id.'/archive') . '">Archive Payment</a></li>
 | 
				
			||||||
 | 
					                            <li><a href="javascript:deleteEntity(' . $model->public_id. ')">Delete Payment</a></li>                          
 | 
				
			||||||
 | 
					                          </ul>
 | 
				
			||||||
 | 
					                        </div>';
 | 
				
			||||||
 | 
					            })         
 | 
				
			||||||
    	    ->orderColumns('client')
 | 
					    	    ->orderColumns('client')
 | 
				
			||||||
    	    ->make();
 | 
					    	    ->make();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -42,10 +57,14 @@ class PaymentController extends \BaseController
 | 
				
			|||||||
    public function create()
 | 
					    public function create()
 | 
				
			||||||
    {       
 | 
					    {       
 | 
				
			||||||
        $data = array(
 | 
					        $data = array(
 | 
				
			||||||
 | 
					            'client' => null,
 | 
				
			||||||
 | 
					            'invoice' => null,
 | 
				
			||||||
 | 
					            'invoices' => Invoice::with('client')->scope()->orderBy('invoice_number')->get(),
 | 
				
			||||||
            'payment' => null, 
 | 
					            'payment' => null, 
 | 
				
			||||||
            'method' => 'POST', 
 | 
					            'method' => 'POST', 
 | 
				
			||||||
            'url' => 'payments', 
 | 
					            'url' => 'payments', 
 | 
				
			||||||
            'title' => '- New Payment');
 | 
					            'title' => '- New Payment',
 | 
				
			||||||
 | 
					            'clients' => Client::scope()->orderBy('name')->get());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return View::make('payments.edit', $data);
 | 
					        return View::make('payments.edit', $data);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -54,29 +73,79 @@ class PaymentController extends \BaseController
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $payment = Payment::scope($publicId)->firstOrFail();        
 | 
					        $payment = Payment::scope($publicId)->firstOrFail();        
 | 
				
			||||||
        $data = array(
 | 
					        $data = array(
 | 
				
			||||||
 | 
					            'client' => null,
 | 
				
			||||||
 | 
					            'invoice' => null,
 | 
				
			||||||
 | 
					            'invoices' => Invoice::scope()->orderBy('invoice_number')->get(array('public_id','invoice_number')),
 | 
				
			||||||
            'payment' => $payment, 
 | 
					            'payment' => $payment, 
 | 
				
			||||||
            'method' => 'PUT', 
 | 
					            'method' => 'PUT', 
 | 
				
			||||||
            'url' => 'payments/' . $publicId, 
 | 
					            'url' => 'payments/' . $publicId, 
 | 
				
			||||||
            'title' => '- Edit Payment');
 | 
					            'title' => '- Edit Payment',
 | 
				
			||||||
 | 
					            'clients' => Client::scope()->orderBy('name')->get());
 | 
				
			||||||
        return View::make('payments.edit', $data);
 | 
					        return View::make('payments.edit', $data);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function store()
 | 
				
			||||||
    public function archive($publicId)
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $payment = Payment::scope($publicId)->firstOrFail();
 | 
					        return $this->save();
 | 
				
			||||||
        $payment->delete();
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function update($publicId)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return $this->save($publicId);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private function save($publicId = null)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $rules = array(
 | 
				
			||||||
 | 
					            'client' => 'required',
 | 
				
			||||||
 | 
					            'amount' => 'required'
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					        $validator = Validator::make(Input::all(), $rules);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($validator->fails()) {
 | 
				
			||||||
 | 
					            $url = $publicId ? 'payments/' . $publicId . '/edit' : 'payments/create';
 | 
				
			||||||
 | 
					            return Redirect::to($url)
 | 
				
			||||||
 | 
					                ->withErrors($validator)
 | 
				
			||||||
 | 
					                ->withInput();
 | 
				
			||||||
 | 
					        } else {            
 | 
				
			||||||
 | 
					            if ($publicId) {
 | 
				
			||||||
 | 
					                $payment = Payment::scope($publicId)->firstOrFail();
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                $payment = Payment::createNew();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $invoiceId = Input::get('invoice') && Input::get('invoice') != "-1" ? Input::get('invoice') : null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $payment->client_id = Input::get('client');
 | 
				
			||||||
 | 
					            $payment->invoice_id = $invoiceId;
 | 
				
			||||||
 | 
					            $payment->payment_date = toSqlDate(Input::get('payment_date'));
 | 
				
			||||||
 | 
					            $payment->amount = Input::get('amount');
 | 
				
			||||||
 | 
					            $payment->save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $message = $publicId ? 'Successfully updated payment' : 'Successfully created payment';
 | 
				
			||||||
 | 
					            Session::flash('message', $message);
 | 
				
			||||||
 | 
					            return Redirect::to('clients/' . $payment->client_id);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function bulk()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $action = Input::get('action');
 | 
				
			||||||
 | 
					        $ids = Input::get('ids');
 | 
				
			||||||
 | 
					        $payments = Payment::scope($ids)->get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        foreach ($payments as $payment) {
 | 
				
			||||||
 | 
					            if ($action == 'archive') {
 | 
				
			||||||
 | 
					                $payment->delete();
 | 
				
			||||||
 | 
					            } else if ($action == 'delete') {
 | 
				
			||||||
 | 
					                $payment->forceDelete();
 | 
				
			||||||
 | 
					            } 
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $message = pluralize('Successfully '.$action.'d ? payment', count($ids));
 | 
				
			||||||
 | 
					        Session::flash('message', $message);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Session::flash('message', 'Successfully archived payment');
 | 
					 | 
				
			||||||
        return Redirect::to('payments');
 | 
					        return Redirect::to('payments');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function delete($publicId)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        $payment = Payment::scope($publicId)->firstOrFail();
 | 
					 | 
				
			||||||
        $payment->forceDelete();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Session::flash('message', 'Successfully deleted payment');
 | 
					 | 
				
			||||||
        return Redirect::to('payments');     
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -11,6 +11,15 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class UserController extends BaseController {
 | 
					class UserController extends BaseController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function setTheme()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $user = User::find(Auth::user()->id);
 | 
				
			||||||
 | 
					        $user->theme_id = Input::get('theme_id');
 | 
				
			||||||
 | 
					        $user->save();
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        return Redirect::to(Input::get('path'));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Displays the form for account creation
 | 
					     * Displays the form for account creation
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 | 
				
			|||||||
@ -10,6 +10,7 @@ class ConfideSetupUsersTable extends Migration {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function up()
 | 
					    public function up()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        Schema::dropIfExists('themes');        
 | 
				
			||||||
        Schema::dropIfExists('credits');        
 | 
					        Schema::dropIfExists('credits');        
 | 
				
			||||||
        Schema::dropIfExists('activities');
 | 
					        Schema::dropIfExists('activities');
 | 
				
			||||||
        Schema::dropIfExists('invitations');
 | 
					        Schema::dropIfExists('invitations');
 | 
				
			||||||
@ -47,6 +48,12 @@ class ConfideSetupUsersTable extends Migration {
 | 
				
			|||||||
            $table->boolean('eea')->default(0);                        
 | 
					            $table->boolean('eea')->default(0);                        
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Schema::create('themes', function($t)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            $t->increments('id');
 | 
				
			||||||
 | 
					            $t->string('name');
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Schema::create('timezones', function($t)
 | 
					        Schema::create('timezones', function($t)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            $t->increments('id');
 | 
					            $t->increments('id');
 | 
				
			||||||
@ -121,6 +128,7 @@ class ConfideSetupUsersTable extends Migration {
 | 
				
			|||||||
            $t->string('confirmation_code');
 | 
					            $t->string('confirmation_code');
 | 
				
			||||||
            $t->boolean('registered')->default(false);
 | 
					            $t->boolean('registered')->default(false);
 | 
				
			||||||
            $t->boolean('confirmed')->default(false);
 | 
					            $t->boolean('confirmed')->default(false);
 | 
				
			||||||
 | 
					            $t->integer('theme_id');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            $t->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
 | 
					            $t->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -170,6 +178,7 @@ class ConfideSetupUsersTable extends Migration {
 | 
				
			|||||||
            $t->timestamps();
 | 
					            $t->timestamps();
 | 
				
			||||||
            $t->softDeletes();
 | 
					            $t->softDeletes();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $t->boolean('is_primary');
 | 
				
			||||||
            $t->string('first_name');
 | 
					            $t->string('first_name');
 | 
				
			||||||
            $t->string('last_name');
 | 
					            $t->string('last_name');
 | 
				
			||||||
            $t->string('email');
 | 
					            $t->string('email');
 | 
				
			||||||
@ -204,6 +213,9 @@ class ConfideSetupUsersTable extends Migration {
 | 
				
			|||||||
            $t->date('due_date');
 | 
					            $t->date('due_date');
 | 
				
			||||||
            $t->text('notes');
 | 
					            $t->text('notes');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $t->decimal('total', 10, 2);
 | 
				
			||||||
 | 
					            $t->decimal('balance', 10, 2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            $t->foreign('client_id')->references('id')->on('clients')->onDelete('cascade'); 
 | 
					            $t->foreign('client_id')->references('id')->on('clients')->onDelete('cascade'); 
 | 
				
			||||||
            $t->foreign('account_id')->references('id')->on('accounts'); 
 | 
					            $t->foreign('account_id')->references('id')->on('accounts'); 
 | 
				
			||||||
            $t->foreign('invoice_status_id')->references('id')->on('invoice_statuses');
 | 
					            $t->foreign('invoice_status_id')->references('id')->on('invoice_statuses');
 | 
				
			||||||
@ -277,7 +289,7 @@ class ConfideSetupUsersTable extends Migration {
 | 
				
			|||||||
        Schema::create('payments', function($t)
 | 
					        Schema::create('payments', function($t)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            $t->increments('id');
 | 
					            $t->increments('id');
 | 
				
			||||||
            $t->unsignedInteger('invoice_id');
 | 
					            $t->unsignedInteger('invoice_id')->nullable();
 | 
				
			||||||
            $t->unsignedInteger('account_id');
 | 
					            $t->unsignedInteger('account_id');
 | 
				
			||||||
            $t->unsignedInteger('client_id');
 | 
					            $t->unsignedInteger('client_id');
 | 
				
			||||||
            $t->unsignedInteger('contact_id')->nullable();
 | 
					            $t->unsignedInteger('contact_id')->nullable();
 | 
				
			||||||
@ -352,6 +364,7 @@ class ConfideSetupUsersTable extends Migration {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function down()
 | 
					    public function down()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        Schema::dropIfExists('themes');        
 | 
				
			||||||
        Schema::dropIfExists('credits');        
 | 
					        Schema::dropIfExists('credits');        
 | 
				
			||||||
        Schema::dropIfExists('activities');
 | 
					        Schema::dropIfExists('activities');
 | 
				
			||||||
        Schema::dropIfExists('invitations');
 | 
					        Schema::dropIfExists('invitations');
 | 
				
			||||||
 | 
				
			|||||||
@ -31,6 +31,19 @@ class ConstantsSeeder extends Seeder
 | 
				
			|||||||
		$client->invoices()->save($invoice);
 | 
							$client->invoices()->save($invoice);
 | 
				
			||||||
		*/
 | 
							*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Theme::create(array('name' => 'amelia'));
 | 
				
			||||||
 | 
							Theme::create(array('name' => 'cerulean'));
 | 
				
			||||||
 | 
							Theme::create(array('name' => 'cosmo'));
 | 
				
			||||||
 | 
							Theme::create(array('name' => 'cyborg'));
 | 
				
			||||||
 | 
							Theme::create(array('name' => 'flatly'));
 | 
				
			||||||
 | 
							Theme::create(array('name' => 'journal'));
 | 
				
			||||||
 | 
							Theme::create(array('name' => 'readable'));
 | 
				
			||||||
 | 
							Theme::create(array('name' => 'simplex'));
 | 
				
			||||||
 | 
							Theme::create(array('name' => 'slate'));
 | 
				
			||||||
 | 
							Theme::create(array('name' => 'spacelab'));
 | 
				
			||||||
 | 
							Theme::create(array('name' => 'united'));
 | 
				
			||||||
 | 
							Theme::create(array('name' => 'yeti'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		InvoiceStatus::create(array('name' => 'Draft'));
 | 
							InvoiceStatus::create(array('name' => 'Draft'));
 | 
				
			||||||
		InvoiceStatus::create(array('name' => 'Sent'));
 | 
							InvoiceStatus::create(array('name' => 'Sent'));
 | 
				
			||||||
		InvoiceStatus::create(array('name' => 'Viewed'));
 | 
							InvoiceStatus::create(array('name' => 'Viewed'));
 | 
				
			||||||
 | 
				
			|||||||
@ -100,12 +100,27 @@ class Activity extends Eloquent
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		$activity->payment_id = $payment->id;
 | 
							$activity->payment_id = $payment->id;
 | 
				
			||||||
		$activity->invoice_id = $payment->invoice_id;
 | 
							if ($payment->invoice_id) {
 | 
				
			||||||
		$activity->client_id = $payment->invoice->client_id;
 | 
								$activity->invoice_id = $payment->invoice_id;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							$activity->client_id = $payment->client_id;
 | 
				
			||||||
		$activity->activity_type_id = ACTIVITY_TYPE_CREATE_PAYMENT;
 | 
							$activity->activity_type_id = ACTIVITY_TYPE_CREATE_PAYMENT;
 | 
				
			||||||
		$activity->save();
 | 
							$activity->save();
 | 
				
			||||||
	}	
 | 
						}	
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public static function createCredit($credit)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							$activity = Activity::getBlank();
 | 
				
			||||||
 | 
							$activity->message = Auth::user()->getFullName() . ' created credit';
 | 
				
			||||||
 | 
							$activity->credit_id = $credit->id;
 | 
				
			||||||
 | 
							$activity->client_id = $credit->client_id;
 | 
				
			||||||
 | 
							$activity->activity_type_id = ACTIVITY_TYPE_CREATE_CREDIT;
 | 
				
			||||||
 | 
							$activity->save();
 | 
				
			||||||
 | 
						}	
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public static function archivePayment($payment)
 | 
						public static function archivePayment($payment)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		$activity = Activity::getBlank();
 | 
							$activity = Activity::getBlank();
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class Client extends EntityModel
 | 
					class Client extends EntityModel
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	protected $hidden = array('id', 'created_at', 'updated_at', 'deleted_at', 'notes', 'last_login');
 | 
						protected $hidden = array('id', 'account_id', 'created_at', 'updated_at', 'deleted_at', 'notes', 'last_login');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public static $fieldName = 'Client - Name';
 | 
						public static $fieldName = 'Client - Name';
 | 
				
			||||||
	public static $fieldPhone = 'Client - Phone';
 | 
						public static $fieldPhone = 'Client - Phone';
 | 
				
			||||||
 | 
				
			|||||||
@ -19,6 +19,7 @@ class Contact extends EntityModel
 | 
				
			|||||||
		return PERSON_CONTACT;
 | 
							return PERSON_CONTACT;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
	public function getLastLogin()
 | 
						public function getLastLogin()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if ($this->last_login == '0000-00-00 00:00:00') 
 | 
							if ($this->last_login == '0000-00-00 00:00:00') 
 | 
				
			||||||
@ -30,6 +31,7 @@ class Contact extends EntityModel
 | 
				
			|||||||
			return $this->last_login->format('m/d/y h:i a');
 | 
								return $this->last_login->format('m/d/y h:i a');
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						*/
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public function getFullName()
 | 
						public function getFullName()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,11 @@ class Credit extends EntityModel
 | 
				
			|||||||
		return $this->belongsTo('Invoice');
 | 
							return $this->belongsTo('Invoice');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function client()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return $this->belongsTo('Client');
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public function getName()
 | 
						public function getName()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return $this->credit_number;
 | 
							return $this->credit_number;
 | 
				
			||||||
@ -20,5 +25,5 @@ class Credit extends EntityModel
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Credit::created(function($credit)
 | 
					Credit::created(function($credit)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	Activity::creaateCredit($credit);
 | 
						Activity::createCredit($credit);
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class Invoice extends EntityModel
 | 
					class Invoice extends EntityModel
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	protected $hidden = array('id', 'created_at', 'updated_at', 'deleted_at', 'viewed_date');
 | 
						protected $hidden = array('id', 'account_id', 'client_id', 'created_at', 'updated_at', 'deleted_at', 'viewed_date');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public function account()
 | 
						public function account()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -34,6 +34,7 @@ class Invoice extends EntityModel
 | 
				
			|||||||
		return ENTITY_INVOICE;
 | 
							return ENTITY_INVOICE;
 | 
				
			||||||
	}	
 | 
						}	
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
	public function getTotal()
 | 
						public function getTotal()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		$total = 0;
 | 
							$total = 0;
 | 
				
			||||||
@ -45,6 +46,7 @@ class Invoice extends EntityModel
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		return $total;
 | 
							return $total;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						*/
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Invoice::created(function($invoice)
 | 
					Invoice::created(function($invoice)
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,11 @@ class Payment extends EntityModel
 | 
				
			|||||||
		return $this->belongsTo('Invoice');
 | 
							return $this->belongsTo('Invoice');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function client()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return $this->belongsTo('Client');
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public function getName()
 | 
						public function getName()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return '';
 | 
							return '';
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										7
									
								
								app/models/Theme.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								app/models/Theme.php
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Theme extends EntityModel
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						public $timestamps = false;
 | 
				
			||||||
 | 
						protected $softDelete = false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -31,6 +31,11 @@ class User extends ConfideUser implements UserInterface, RemindableInterface, iP
 | 
				
			|||||||
		return $this->belongsTo('Account');
 | 
							return $this->belongsTo('Account');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function theme()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return $this->belongsTo('Theme');
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public function getPersonType()
 | 
						public function getPersonType()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return PERSON_USER;
 | 
							return PERSON_USER;
 | 
				
			||||||
 | 
				
			|||||||
@ -36,31 +36,25 @@ Route::group(array('before' => 'auth'), function()
 | 
				
			|||||||
	Route::get('home', function() { return View::make('header'); });
 | 
						Route::get('home', function() { return View::make('header'); });
 | 
				
			||||||
	Route::get('account/{section?}', 'AccountController@showSection');
 | 
						Route::get('account/{section?}', 'AccountController@showSection');
 | 
				
			||||||
	Route::post('account/{section?}', 'AccountController@doSection');
 | 
						Route::post('account/{section?}', 'AccountController@doSection');
 | 
				
			||||||
 | 
						Route::post('user/setTheme', 'UserController@setTheme');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	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::get('api/activities/{client_id?}', array('as'=>'api.activities', 'uses'=>'ActivityController@getDatatable'));	
 | 
						Route::get('api/activities/{client_id?}', array('as'=>'api.activities', 'uses'=>'ActivityController@getDatatable'));	
 | 
				
			||||||
	Route::post('clients/bulk', 'ClientController@bulk');
 | 
						Route::post('clients/bulk', 'ClientController@bulk');
 | 
				
			||||||
	Route::get('clients/{client_id}/archive', 'ClientController@archive');
 | 
					 | 
				
			||||||
	Route::get('clients/{client_id}/delete', 'ClientController@delete');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	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::post('invoices/bulk', 'InvoiceController@bulk');
 | 
				
			||||||
	Route::get('invoices/{client_id}/archive', 'InvoiceController@archive');
 | 
					 | 
				
			||||||
	Route::get('invoices/{client_id}/delete', 'InvoiceController@delete');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Route::resource('payments', 'PaymentController');
 | 
						Route::resource('payments', 'PaymentController');
 | 
				
			||||||
	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::post('payments/bulk', 'PaymentController@bulk');
 | 
				
			||||||
	Route::get('payments/{client_id}/archive', 'PaymentController@archive');
 | 
					 | 
				
			||||||
	Route::get('payments/{client_id}/delete', 'PaymentController@delete');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Route::resource('credits', 'CreditController');
 | 
						Route::resource('credits', 'CreditController');
 | 
				
			||||||
	Route::get('api/credits/{client_id?}', array('as'=>'api.credits', 'uses'=>'CreditController@getDatatable'));	
 | 
						Route::get('api/credits/{client_id?}', array('as'=>'api.credits', 'uses'=>'CreditController@getDatatable'));	
 | 
				
			||||||
	Route::get('credits/{client_id}/archive', 'CreditController@archive');
 | 
						Route::post('credits/bulk', 'PaymentController@bulk');
 | 
				
			||||||
	Route::get('credits/{client_id}/delete', 'CreditController@delete');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Route::get('reports', function() { return View::make('header'); });
 | 
						Route::get('reports', function() { return View::make('header'); });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
@ -132,9 +126,26 @@ function timestampToDateTimeString($timestamp) {
 | 
				
			|||||||
	}	
 | 
						}	
 | 
				
			||||||
	$date = new Carbon($timestamp);	
 | 
						$date = new Carbon($timestamp);	
 | 
				
			||||||
	$date->tz = $tz;	
 | 
						$date->tz = $tz;	
 | 
				
			||||||
	return $date->toDayDateTimeString();
 | 
						if ($date->year < 1900) {
 | 
				
			||||||
 | 
							return '';
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return $date->toFormattedDateTimeString();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function timestampToDateString($timestamp) {
 | 
				
			||||||
 | 
						$tz = Session::get('tz');
 | 
				
			||||||
 | 
						if (!$tz) {
 | 
				
			||||||
 | 
							$tz = 'US/Eastern';
 | 
				
			||||||
 | 
						}	
 | 
				
			||||||
 | 
						$date = new Carbon($timestamp);	
 | 
				
			||||||
 | 
						$date->tz = $tz;	
 | 
				
			||||||
 | 
						if ($date->year < 1900) {
 | 
				
			||||||
 | 
							return '';
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return $date->toFormattedDateString();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function toDateString($date)
 | 
					function toDateString($date)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if ($date->year < 1900) {
 | 
						if ($date->year < 1900) {
 | 
				
			||||||
@ -174,6 +185,16 @@ function fromSqlDate($date)
 | 
				
			|||||||
	return DateTime::createFromFormat('Y-m-d', $date)->format('m/d/Y');
 | 
						return DateTime::createFromFormat('Y-m-d', $date)->format('m/d/Y');
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function fromSqlTimestamp($date)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (!$date || $date == '0000-00-00 00:00:00')
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return '';
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						return DateTime::createFromFormat('Y-m-d H:i:s', $date)->format('m/d/Y h:ia');
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function processedRequest($url)
 | 
					function processedRequest($url)
 | 
				
			||||||
{	
 | 
					{	
 | 
				
			||||||
	//Session::put(Input::get('_token'), $url);
 | 
						//Session::put(Input::get('_token'), $url);
 | 
				
			||||||
 | 
				
			|||||||
@ -45,7 +45,7 @@
 | 
				
			|||||||
			<div data-bind='template: { foreach: contacts,
 | 
								<div data-bind='template: { foreach: contacts,
 | 
				
			||||||
		                            beforeRemove: hideContact,
 | 
							                            beforeRemove: hideContact,
 | 
				
			||||||
		                            afterAdd: showContact }'>
 | 
							                            afterAdd: showContact }'>
 | 
				
			||||||
				{{ Former::hidden('id')->data_bind("value: id, valueUpdate: 'afterkeydown'") }}
 | 
									{{ Former::hidden('public_id')->data_bind("value: public_id, valueUpdate: 'afterkeydown'") }}
 | 
				
			||||||
				{{ Former::text('first_name')->data_bind("value: first_name, 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('last_name')->data_bind("value: last_name, valueUpdate: 'afterkeydown'") }}
 | 
				
			||||||
				{{ Former::text('email')->data_bind("value: email, valueUpdate: 'afterkeydown'") }}
 | 
									{{ Former::text('email')->data_bind("value: email, valueUpdate: 'afterkeydown'") }}
 | 
				
			||||||
@ -85,7 +85,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	function ContactModel() {
 | 
						function ContactModel() {
 | 
				
			||||||
		var self = this;
 | 
							var self = this;
 | 
				
			||||||
		self.id = ko.observable('');
 | 
							self.public_id = ko.observable('');
 | 
				
			||||||
		self.first_name = ko.observable('');
 | 
							self.first_name = ko.observable('');
 | 
				
			||||||
		self.last_name = ko.observable('');
 | 
							self.last_name = ko.observable('');
 | 
				
			||||||
		self.email = ko.observable('');
 | 
							self.email = ko.observable('');
 | 
				
			||||||
 | 
				
			|||||||
@ -90,7 +90,7 @@
 | 
				
			|||||||
        <div class="tab-pane" id="payments">
 | 
					        <div class="tab-pane" id="payments">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	    	{{ Datatable::table()		
 | 
						    	{{ Datatable::table()		
 | 
				
			||||||
				->addColumn('Invoice Number', 'Amount', 'Date')       
 | 
									->addColumn('Transaction Reference', 'Invoice', 'Amount', 'Payment Date')       
 | 
				
			||||||
				->setUrl(url('api/payments/' . $client->public_id))    	
 | 
									->setUrl(url('api/payments/' . $client->public_id))    	
 | 
				
			||||||
				->setOptions('sPaginationType', 'bootstrap')
 | 
									->setOptions('sPaginationType', 'bootstrap')
 | 
				
			||||||
				->setOptions('bFilter', false)
 | 
									->setOptions('bFilter', false)
 | 
				
			||||||
@ -100,7 +100,7 @@
 | 
				
			|||||||
        <div class="tab-pane" id="credits">
 | 
					        <div class="tab-pane" id="credits">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	    	{{ Datatable::table()		
 | 
						    	{{ Datatable::table()		
 | 
				
			||||||
				->addColumn('Credit Number', 'Amount', 'Credit Date')       
 | 
									->addColumn('Amount', 'Credit Date')       
 | 
				
			||||||
				->setUrl(url('api/credits/' . $client->public_id))    	
 | 
									->setUrl(url('api/credits/' . $client->public_id))    	
 | 
				
			||||||
				->setOptions('sPaginationType', 'bootstrap')
 | 
									->setOptions('sPaginationType', 'bootstrap')
 | 
				
			||||||
				->setOptions('bFilter', false)
 | 
									->setOptions('bFilter', false)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										62
									
								
								app/views/credits/edit.blade.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										62
									
								
								app/views/credits/edit.blade.php
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,62 @@
 | 
				
			|||||||
 | 
					@extends('header')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@section('onReady')
 | 
				
			||||||
 | 
						$('input#name').focus();
 | 
				
			||||||
 | 
					@stop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@section('content')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						{{ Former::open($url)->addClass('col-md-10 col-md-offset-1 main_form')->method($method)->rules(array(
 | 
				
			||||||
 | 
					  		'amount' => 'required'		
 | 
				
			||||||
 | 
						)); }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@if ($credit)
 | 
				
			||||||
 | 
							{{ Former::populate($credit) }}
 | 
				
			||||||
 | 
						@endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						<div class="row">
 | 
				
			||||||
 | 
							<div class="col-md-8">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								@if ($credit)
 | 
				
			||||||
 | 
									{{ Former::legend('Edit Credit') }}
 | 
				
			||||||
 | 
								@else
 | 
				
			||||||
 | 
									{{ Former::legend('New Credit') }}
 | 
				
			||||||
 | 
								@endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								{{ Former::select('client')->fromQuery($clients, 'name', 'public_id')->select($client ? $client->public_id : '')->addOption('', '')->addGroupClass('client-select') }}
 | 
				
			||||||
 | 
								{{ Former::text('amount') }}
 | 
				
			||||||
 | 
								{{ Former::text('credit_date') }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
							<div class="col-md-6">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<center style="margin-top:16px">
 | 
				
			||||||
 | 
							{{ Button::lg_primary_submit('Save') }}  | 
 | 
				
			||||||
 | 
							{{ link_to('credits/' . ($credit ? $credit->public_id : ''), 'Cancel') }}	
 | 
				
			||||||
 | 
						</center>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{{ Former::close() }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<script type="text/javascript">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						$(function() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var $input = $('select#client');		
 | 
				
			||||||
 | 
							$input.combobox();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$('#credit_date').datepicker({
 | 
				
			||||||
 | 
								autoclose: true,
 | 
				
			||||||
 | 
								todayHighlight: true
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@stop
 | 
				
			||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
<table class="table {{ $class = str_random(8) }}">
 | 
					<table class="table table-striped {{ $class = str_random(8) }}">
 | 
				
			||||||
    <colgroup>
 | 
					    <colgroup>
 | 
				
			||||||
        @for ($i = 0; $i < count($columns); $i++)
 | 
					        @for ($i = 0; $i < count($columns); $i++)
 | 
				
			||||||
        <col class="con{{ $i }}" />
 | 
					        <col class="con{{ $i }}" />
 | 
				
			||||||
 | 
				
			|||||||
@ -23,8 +23,11 @@
 | 
				
			|||||||
	<script src="{{ asset('js/typeahead.js') }}" type="text/javascript"></script>		
 | 
						<script src="{{ asset('js/typeahead.js') }}" type="text/javascript"></script>		
 | 
				
			||||||
	<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') }}"/>	
 | 
				
			||||||
	-->
 | 
						-->
 | 
				
			||||||
 | 
						@if (Auth::check() && Auth::user()->theme_id)
 | 
				
			||||||
	<link rel="stylesheet" type="text/css" href="{{ asset('css/bootstrap.css') }}"/>	
 | 
							<link rel="stylesheet" type="text/css" href="{{ asset('css/themes/'.Auth::user()->theme->name.'.min.css') }}"/>		
 | 
				
			||||||
 | 
						@else
 | 
				
			||||||
 | 
							<link rel="stylesheet" type="text/css" href="{{ asset('css/bootstrap.css') }}"/>
 | 
				
			||||||
 | 
						@endif
 | 
				
			||||||
	<script src="{{ asset('js/bootstrap.js') }}" type="text/javascript"></script>			
 | 
						<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"> -->
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
@ -107,6 +110,7 @@
 | 
				
			|||||||
		margin-top: -30px;
 | 
							margin-top: -30px;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
	table.table tbody tr.odd {
 | 
						table.table tbody tr.odd {
 | 
				
			||||||
		background-color: #f9f9f9;
 | 
							background-color: #f9f9f9;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -114,9 +118,9 @@
 | 
				
			|||||||
	table.table tbody tr:hover {
 | 
						table.table tbody tr:hover {
 | 
				
			||||||
		background-color: #f0f0f0 !important;
 | 
							background-color: #f0f0f0 !important;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* table sorting indicators */
 | 
				
			||||||
	/*
 | 
					 | 
				
			||||||
	table.table thead .sorting,
 | 
						table.table thead .sorting,
 | 
				
			||||||
	table.table thead .sorting_asc,
 | 
						table.table thead .sorting_asc,
 | 
				
			||||||
	table.table thead .sorting_desc,
 | 
						table.table thead .sorting_desc,
 | 
				
			||||||
@ -126,13 +130,14 @@
 | 
				
			|||||||
	    *cursor: hand;
 | 
						    *cursor: hand;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	 
 | 
						 
 | 
				
			||||||
	table.table thead .sorting { background: url('images/sort_both.png') no-repeat center right; }
 | 
						/*table.table thead .sorting { background: url('images/sort_both.png') no-repeat center right; }*/
 | 
				
			||||||
	table.table thead .sorting_asc { background: url('images/sort_asc.png') no-repeat center right; }
 | 
						table.table thead .sorting_asc { background: url('images/sort_asc.png') no-repeat center right; }
 | 
				
			||||||
	table.table thead .sorting_desc { background: url('images/sort_desc.png') no-repeat center right; }
 | 
						table.table thead .sorting_desc { background: url('images/sort_desc.png') no-repeat center right; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						 
 | 
				
			||||||
	table.table thead .sorting_asc_disabled { background: url('images/sort_asc_disabled.png') no-repeat center right; }
 | 
						table.table thead .sorting_asc_disabled { background: url('images/sort_asc_disabled.png') no-repeat center right; }
 | 
				
			||||||
	table.table thead .sorting_desc_disabled { background: url('images/sort_desc_disabled.png') no-repeat center right; }
 | 
						table.table thead .sorting_desc_disabled { background: url('images/sort_desc_disabled.png') no-repeat center right; }
 | 
				
			||||||
	*/
 | 
					
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Hover nav */
 | 
						/* Hover nav */
 | 
				
			||||||
@ -310,8 +315,29 @@
 | 
				
			|||||||
		</div>
 | 
							</div>
 | 
				
			||||||
		<div class="container">
 | 
							<div class="container">
 | 
				
			||||||
		<div class="footer">
 | 
							<div class="footer">
 | 
				
			||||||
			Powered by {{ link_to('https://github.com/hillelcoren/invoice-ninja', 'InvoiceNinja', array('target'=>'_blank')) }}
 | 
						      <div class="pull-right">
 | 
				
			||||||
 | 
							      	{{ Former::open('user/setTheme')->addClass('themeForm') }}
 | 
				
			||||||
 | 
							      	<div style="display:none">
 | 
				
			||||||
 | 
								      	{{ Former::text('theme_id') }}
 | 
				
			||||||
 | 
								      	{{ Former::text('path')->value(Request::url()) }}
 | 
				
			||||||
 | 
								    </div>
 | 
				
			||||||
 | 
							      	<div class="btn-group tr-action dropup">
 | 
				
			||||||
 | 
										<button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown">
 | 
				
			||||||
 | 
											Theme <span class="caret"></span>
 | 
				
			||||||
 | 
										</button>
 | 
				
			||||||
 | 
										<ul class="dropdown-menu" role="menu">
 | 
				
			||||||
 | 
										<li><a href="#" onclick="setTheme(0)">Default</a></li>
 | 
				
			||||||
 | 
										@foreach (Theme::all() as $theme)
 | 
				
			||||||
 | 
											<li><a href="#" onclick="setTheme({{ $theme->id }})">{{ ucwords($theme->name) }}</a></li>
 | 
				
			||||||
 | 
										@endforeach
 | 
				
			||||||
 | 
									  </ul>
 | 
				
			||||||
 | 
									</div>
 | 
				
			||||||
 | 
							      	{{ Former::close() }}	      	
 | 
				
			||||||
 | 
							    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  			Powered by {{ link_to('https://github.com/hillelcoren/invoice-ninja', 'InvoiceNinja', array('target'=>'_blank')) }}
 | 
				
			||||||
			<p class="text-danger">This is a demo site, the data is erased.</p>
 | 
								<p class="text-danger">This is a demo site, the data is erased.</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		</div>			
 | 
							</div>			
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
@ -384,6 +410,12 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  <script type="text/javascript">
 | 
					  <script type="text/javascript">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  		function setTheme(id)
 | 
				
			||||||
 | 
					  		{
 | 
				
			||||||
 | 
					  			$('#theme_id').val(id);
 | 
				
			||||||
 | 
					  			$('form.themeForm').submit();
 | 
				
			||||||
 | 
					  		}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		@if (!Auth::check() || !Auth::user()->registered)
 | 
							@if (!Auth::check() || !Auth::user()->registered)
 | 
				
			||||||
  		function validateSignUp(showError) 
 | 
					  		function validateSignUp(showError) 
 | 
				
			||||||
  		{
 | 
					  		{
 | 
				
			||||||
 | 
				
			|||||||
@ -207,30 +207,8 @@
 | 
				
			|||||||
		$input.combobox();
 | 
							$input.combobox();
 | 
				
			||||||
		$('.combobox-container input.form-control').attr('name', 'client_combobox').on('change', function(e) {			
 | 
							$('.combobox-container input.form-control').attr('name', 'client_combobox').on('change', function(e) {			
 | 
				
			||||||
			refreshPDF();
 | 
								refreshPDF();
 | 
				
			||||||
		}).mouseleave(function() {
 | 
					 | 
				
			||||||
			$(this).css('text-decoration','none');
 | 
					 | 
				
			||||||
		}).on('change keyup mouseenter', function(e) {
 | 
					 | 
				
			||||||
			if ($(this).closest('.combobox-container').hasClass('combobox-selected')) {
 | 
					 | 
				
			||||||
				$(this).css('text-decoration','underline');
 | 
					 | 
				
			||||||
				$(this).css('cursor','pointer');	
 | 
					 | 
				
			||||||
			} else {
 | 
					 | 
				
			||||||
				$(this).css('text-decoration','none');
 | 
					 | 
				
			||||||
				$(this).css('cursor','text');	
 | 
					 | 
				
			||||||
			}			
 | 
					 | 
				
			||||||
		}).on('focusout mouseleave', function(e) {
 | 
					 | 
				
			||||||
			$(this).css('text-decoration','none');
 | 
					 | 
				
			||||||
			$(this).css('cursor','text');	
 | 
					 | 
				
			||||||
		}).on('click', function() {
 | 
					 | 
				
			||||||
			var clientId = $('.combobox-container input[name=client]').val();
 | 
					 | 
				
			||||||
			if ($(this).closest('.combobox-container').hasClass('combobox-selected')) {				
 | 
					 | 
				
			||||||
				if (parseInt(clientId) > 0) {
 | 
					 | 
				
			||||||
					window.open('{{ URL::to('clients') }}' + '/' + clientId, '_blank');
 | 
					 | 
				
			||||||
				} else {
 | 
					 | 
				
			||||||
					$('#myModal').modal('show');
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			};
 | 
					 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
		
 | 
							enableHoverClick($('.combobox-container input.form-control'), $('.combobox-container input[name=client]'), '{{ URL::to('clients') }}');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		@if ($client)
 | 
							@if ($client)
 | 
				
			||||||
			$('input#invoice_number').focus();
 | 
								$('input#invoice_number').focus();
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,10 @@
 | 
				
			|||||||
@section('content')
 | 
					@section('content')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{{ Former::open($entityType . 's/bulk')->addClass('listForm') }}
 | 
						{{ Former::open($entityType . 's/bulk')->addClass('listForm') }}
 | 
				
			||||||
	<div style="display:none">{{ Former::text('action') }}</div>
 | 
						<div style="display:none">
 | 
				
			||||||
 | 
							{{ Former::text('action') }}
 | 
				
			||||||
 | 
							{{ Former::text('id') }}
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{{ DropdownButton::normal('Archive',
 | 
						{{ DropdownButton::normal('Archive',
 | 
				
			||||||
		  Navigation::links(
 | 
							  Navigation::links(
 | 
				
			||||||
@ -42,10 +45,16 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	function deleteEntity(id) {
 | 
						function deleteEntity(id) {
 | 
				
			||||||
		if (confirm("Are you sure?")) {
 | 
							if (confirm("Are you sure?")) {
 | 
				
			||||||
			window.location = "{{ URL::to($entityType . 's') }}/" + id + "/delete";
 | 
								$('#id').val(id);
 | 
				
			||||||
 | 
								submitForm('delete');	
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						function archiveEntity(id) {
 | 
				
			||||||
 | 
							$('#id').val(id);
 | 
				
			||||||
 | 
							submitForm('archive');
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    </script>
 | 
					    </script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@stop
 | 
					@stop
 | 
				
			||||||
@ -67,11 +76,11 @@
 | 
				
			|||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		$('tbody tr').mouseover(function() {
 | 
							$('tbody tr').mouseover(function() {
 | 
				
			||||||
			$(this).closest('tr').find('.tr-action').show();			
 | 
								$(this).closest('tr').find('.tr-action').css('visibility','visible');
 | 
				
			||||||
		}).mouseout(function() {
 | 
							}).mouseout(function() {
 | 
				
			||||||
			$dropdown = $(this).closest('tr').find('.tr-action');
 | 
								$dropdown = $(this).closest('tr').find('.tr-action');
 | 
				
			||||||
			if (!$dropdown.hasClass('open')) {
 | 
								if (!$dropdown.hasClass('open')) {
 | 
				
			||||||
				$dropdown.hide();
 | 
									$dropdown.css('visibility','hidden');
 | 
				
			||||||
			}			
 | 
								}			
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
	}	
 | 
						}	
 | 
				
			||||||
 | 
				
			|||||||
@ -9,17 +9,16 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	{{ Former::open($url)->addClass('col-md-10 col-md-offset-1 main_form')->method($method)->rules(array(
 | 
						{{ Former::open($url)->addClass('col-md-10 col-md-offset-1 main_form')->method($method)->rules(array(
 | 
				
			||||||
  		'name' => 'required',
 | 
					  		'amount' => 'required'		
 | 
				
			||||||
  		'email' => 'email'  		
 | 
					 | 
				
			||||||
	)); }}
 | 
						)); }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@if ($payment)
 | 
						@if ($payment)
 | 
				
			||||||
		{{ Former::populate($payment) }}
 | 
							{{-- Former::populate($payment) --}}
 | 
				
			||||||
	@endif
 | 
						@endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	<div class="row">
 | 
						<div class="row">
 | 
				
			||||||
		<div class="col-md-6">
 | 
							<div class="col-md-8">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			@if ($payment)
 | 
								@if ($payment)
 | 
				
			||||||
				{{ Former::legend('Edit Payment') }}
 | 
									{{ Former::legend('Edit Payment') }}
 | 
				
			||||||
@ -27,9 +26,10 @@
 | 
				
			|||||||
				{{ Former::legend('New Payment') }}
 | 
									{{ Former::legend('New Payment') }}
 | 
				
			||||||
			@endif
 | 
								@endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			{{ Former::text('name') }}
 | 
								{{ Former::select('client')->addOption('', '')->addGroupClass('client-select') }}
 | 
				
			||||||
			{{ Former::text('work_phone')->label('Phone') }}
 | 
								{{ Former::select('invoice')->addOption('', '')->addGroupClass('invoice-select') }}
 | 
				
			||||||
			{{ Former::textarea('notes') }}
 | 
								{{ Former::text('amount') }}
 | 
				
			||||||
 | 
								{{ Former::text('payment_date') }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
		<div class="col-md-6">
 | 
							<div class="col-md-6">
 | 
				
			||||||
@ -44,4 +44,90 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	{{ Former::close() }}
 | 
						{{ Former::close() }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<script type="text/javascript">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var invoices = {{ $invoices }};
 | 
				
			||||||
 | 
						var clients = {{ $clients }};
 | 
				
			||||||
 | 
						var clientMap = {};
 | 
				
			||||||
 | 
						var invoiceMap = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						function compareClient(a,b) {
 | 
				
			||||||
 | 
						  if (a.name < b.name)
 | 
				
			||||||
 | 
						     return -1;
 | 
				
			||||||
 | 
						  if (a.name> b.name)
 | 
				
			||||||
 | 
						    return 1;
 | 
				
			||||||
 | 
						  return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						$(function() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var $input = $('select#client');		
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							for (var i=0; i<invoices.length; i++) {
 | 
				
			||||||
 | 
								var invoice = invoices[i];
 | 
				
			||||||
 | 
								var client = invoice.client;			
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (!invoiceMap.hasOwnProperty(client.public_id)) {
 | 
				
			||||||
 | 
									invoiceMap[client.public_id] = [];				
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								invoiceMap[client.public_id].push(invoice);
 | 
				
			||||||
 | 
								clientMap[invoice.public_id] = invoice.client;						
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//clients.sort(compareClient);
 | 
				
			||||||
 | 
							$input.append(new Option('', ''));	
 | 
				
			||||||
 | 
							for (var i=0; i<clients.length; i++) {
 | 
				
			||||||
 | 
								var client = clients[i];
 | 
				
			||||||
 | 
								$input.append(new Option(client.name, client.public_id));
 | 
				
			||||||
 | 
							}	
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$input.on('change', function(e) {						
 | 
				
			||||||
 | 
								console.log('client change');
 | 
				
			||||||
 | 
								var clientId = $('input[name=client]').val();
 | 
				
			||||||
 | 
								var invoiceId = $('input[name=invoice]').val();						
 | 
				
			||||||
 | 
								if (clientMap.hasOwnProperty(invoiceId) && clientMap[invoiceId].public_id == clientId) {
 | 
				
			||||||
 | 
									console.log('values the same:' + $('select#client').prop('selected'))
 | 
				
			||||||
 | 
									e.preventDefault();
 | 
				
			||||||
 | 
									return;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								setComboboxValue($('.invoice-select'), '', '');				
 | 
				
			||||||
 | 
								$invoiceCombobox = $('select#invoice');
 | 
				
			||||||
 | 
								$invoiceCombobox.find('option').remove().end().combobox('refresh');			
 | 
				
			||||||
 | 
								$invoiceCombobox.append(new Option('', ''));
 | 
				
			||||||
 | 
								var list = clientId ? (invoiceMap.hasOwnProperty(clientId) ? invoiceMap[clientId] : []) : invoices;
 | 
				
			||||||
 | 
								for (var i=0; i<list.length; i++) {
 | 
				
			||||||
 | 
									var invoice = list[i];
 | 
				
			||||||
 | 
									$invoiceCombobox.append(new Option(invoice.invoice_number + ' - ' + invoice.invoice_date + ' - ' + invoice.client.name,  invoice.public_id));
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								$('select#invoice').combobox('refresh');
 | 
				
			||||||
 | 
							}).trigger('change');
 | 
				
			||||||
 | 
							//enableHoverClick($('.client-select input.form-control'), $('input[name=client]'), '{{ URL::to('clients') }}');
 | 
				
			||||||
 | 
							$input.combobox();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var $input = $('select#invoice').on('change', function(e) {			
 | 
				
			||||||
 | 
								console.log('invoice change');
 | 
				
			||||||
 | 
								$clientCombobox = $('select#client');
 | 
				
			||||||
 | 
								var invoiceId = $('input[name=invoice]').val();						
 | 
				
			||||||
 | 
								if (invoiceId) {
 | 
				
			||||||
 | 
									var client = clientMap[invoiceId];
 | 
				
			||||||
 | 
									setComboboxValue($('.client-select'), client.public_id, client.name);				
 | 
				
			||||||
 | 
									//setComboboxValue($('select#client'), client.public_id, client.name);				
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
							//enableHoverClick($('.invoice-select input.form-control'), $('input[name=invoice]'), '{{ URL::to('invoices') }}');
 | 
				
			||||||
 | 
							$input.combobox();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$('#payment_date').datepicker({
 | 
				
			||||||
 | 
								autoclose: true,
 | 
				
			||||||
 | 
								todayHighlight: true
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@stop
 | 
					@stop
 | 
				
			||||||
							
								
								
									
										1
									
								
								public/css/bootstrap.space.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1
									
								
								public/css/bootstrap.space.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/css/themes/amelia.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1
									
								
								public/css/themes/amelia.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/css/themes/cerulean.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1
									
								
								public/css/themes/cerulean.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/css/themes/cosmo.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1
									
								
								public/css/themes/cosmo.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/css/themes/cyborg.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1
									
								
								public/css/themes/cyborg.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/css/themes/flatly.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1
									
								
								public/css/themes/flatly.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/css/themes/journal.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1
									
								
								public/css/themes/journal.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/css/themes/readable.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1
									
								
								public/css/themes/readable.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/css/themes/simplex.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1
									
								
								public/css/themes/simplex.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/css/themes/slate.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1
									
								
								public/css/themes/slate.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/css/themes/spacelab.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1
									
								
								public/css/themes/spacelab.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/css/themes/united.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1
									
								
								public/css/themes/united.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/css/themes/yeti.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1
									
								
								public/css/themes/yeti.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -379,3 +379,49 @@ $(function() {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function enableHoverClick($combobox, $entityId, url) {
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						$combobox.mouseleave(function() {
 | 
				
			||||||
 | 
							$combobox.css('text-decoration','none');
 | 
				
			||||||
 | 
						}).on('mouseenter', function(e) {
 | 
				
			||||||
 | 
							setAsLink($combobox, $combobox.closest('.combobox-container').hasClass('combobox-selected'));
 | 
				
			||||||
 | 
						}).on('focusout mouseleave', function(e) {
 | 
				
			||||||
 | 
							setAsLink($combobox, false);
 | 
				
			||||||
 | 
						}).on('click', function() {
 | 
				
			||||||
 | 
							var clientId = $entityId.val();
 | 
				
			||||||
 | 
							if ($(combobox).closest('.combobox-container').hasClass('combobox-selected')) {				
 | 
				
			||||||
 | 
								if (parseInt(clientId) > 0) {
 | 
				
			||||||
 | 
									window.open(url + '/' + clientId, '_blank');
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									$('#myModal').modal('show');
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function setAsLink($input, enable) {
 | 
				
			||||||
 | 
						if (enable) {
 | 
				
			||||||
 | 
							$input.css('text-decoration','underline');
 | 
				
			||||||
 | 
							$input.css('cursor','pointer');	
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							$input.css('text-decoration','none');
 | 
				
			||||||
 | 
							$input.css('cursor','text');	
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function setComboboxValue($combobox, id, name) {
 | 
				
			||||||
 | 
						console.log('id: ' + id);
 | 
				
			||||||
 | 
						$combobox.find('input').val(id);
 | 
				
			||||||
 | 
						$combobox.find('input.form-control').val(name);
 | 
				
			||||||
 | 
						if (id && name) {
 | 
				
			||||||
 | 
							//console.log('%s %s', $combobox.find('select')[0], id);
 | 
				
			||||||
 | 
							//$combobox.find('select').val(id).prop('selected', 'selected');
 | 
				
			||||||
 | 
							$combobox.find('.combobox-container').addClass('combobox-selected');
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							//$combobox.find('select').val('');
 | 
				
			||||||
 | 
							$combobox.find('.combobox-container').removeClass('combobox-selected');
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						//console.log($combobox).combobox('');
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user