1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-09-20 08:21:34 +02:00

Merge branch 'master' of github.com:hillelcoren/invoice-ninja

This commit is contained in:
Hillel Coren 2014-05-11 13:49:27 +03:00
commit 83cd9aaf64
32 changed files with 32362 additions and 353 deletions

View File

@ -4,11 +4,9 @@
### [https://www.invoiceninja.com](https://www.invoiceninja.com) ### [https://www.invoiceninja.com](https://www.invoiceninja.com)
### Introduction ### Introduction
Most online invoicing sites are expensive. They shouldn't be. The aim of this project is to provide a free, open-source alternative. Additionally, the hope is the codebase will serve as a sample site for Laravel as well as other JavaScript technologies. Most online invoicing sites are expensive. They shouldn't be. The aim of this project is to provide a free, open-source alternative. [This guide](http://hillelcoren.com/invoice-ninja/self-hosting/) is the simplest way to setup the site. The high level instructions for setting up the site using Git are below but there's also a more detailed [setup guide](http://hillelcoren.com/invoice-ninja/laravel-ubuntu-virtualbox/).
[This guide](http://hillelcoren.com/invoice-ninja/self-hosting/) is the simplest way to setup the site. The high level instructions for setting up the site using Git are below but there's also a more detailed [setup guide](http://hillelcoren.com/invoice-ninja/laravel-ubuntu-virtualbox/). To connect follow [@invoiceninja](https://twitter.com/invoiceninja) or join the [Facebook Group](https://www.facebook.com/invoiceninja). For discussion of the code please use the [Google Group](https://groups.google.com/d/forum/invoiceninja).
For updates follow [@invoiceninja](https://twitter.com/invoiceninja) or join the [Facebook Group](https://www.facebook.com/invoiceninja). For discussion of the code please use the [Google Group](https://groups.google.com/d/forum/invoiceninja).
If you'd like to translate the site please use [caouecs/Laravel4-long](https://github.com/caouecs/Laravel4-lang) for the starter files. If you'd like to translate the site please use [caouecs/Laravel4-long](https://github.com/caouecs/Laravel4-lang) for the starter files.

View File

@ -78,7 +78,7 @@ class AccountController extends \BaseController {
return Response::json($data); return Response::json($data);
} }
public function showSection($section = ACCOUNT_DETAILS) public function showSection($section = ACCOUNT_DETAILS, $subSection = false)
{ {
if ($section == ACCOUNT_DETAILS) if ($section == ACCOUNT_DETAILS)
{ {
@ -184,10 +184,11 @@ class AccountController extends \BaseController {
else if ($section == ACCOUNT_ADVANCED_SETTINGS) else if ($section == ACCOUNT_ADVANCED_SETTINGS)
{ {
$data = [ $data = [
'account' => Auth::user()->account 'account' => Auth::user()->account,
'feature' => $subSection
]; ];
return View::make('accounts.advanced_settings', $data); return View::make("accounts.{$subSection}", $data);
} }
else if ($section == ACCOUNT_PRODUCTS) else if ($section == ACCOUNT_PRODUCTS)
{ {
@ -227,7 +228,14 @@ class AccountController extends \BaseController {
} }
else if ($section == ACCOUNT_ADVANCED_SETTINGS) else if ($section == ACCOUNT_ADVANCED_SETTINGS)
{ {
return AccountController::saveAdvancedSettings(); if ($subSection == ACCOUNT_CUSTOM_FIELDS)
{
return AccountController::saveCustomFields();
}
else if ($subSection == ACCOUNT_INVOICE_DESIGN)
{
return AccountController::saveInvoiceDesign();
}
} }
else if ($section == ACCOUNT_PRODUCTS) else if ($section == ACCOUNT_PRODUCTS)
{ {
@ -247,23 +255,37 @@ class AccountController extends \BaseController {
return Redirect::to('company/products'); return Redirect::to('company/products');
} }
private function saveAdvancedSettings() private function saveCustomFields()
{ {
$account = Auth::user()->account; if (!Auth::user()->account->isPro())
{
$account = Auth::user()->account;
$account->custom_label1 = Input::get('custom_label1');
$account->custom_value1 = Input::get('custom_value1');
$account->custom_label2 = Input::get('custom_label2');
$account->custom_value2 = Input::get('custom_value2');
$account->custom_client_label1 = Input::get('custom_client_label1');
$account->custom_client_label2 = Input::get('custom_client_label2');
$account->save();
$account->custom_label1 = Input::get('custom_label1'); Session::flash('message', trans('texts.updated_settings'));
$account->custom_value1 = Input::get('custom_value1'); }
$account->custom_label2 = Input::get('custom_label2');
$account->custom_value2 = Input::get('custom_value2');
$account->custom_client_label1 = Input::get('custom_client_label1');
$account->custom_client_label2 = Input::get('custom_client_label2');
$account->primary_color = Input::get('primary_color');// ? Input::get('primary_color') : null; return Redirect::to('company/advanced_settings');
$account->secondary_color = Input::get('secondary_color');// ? Input::get('secondary_color') : null; }
$account->save(); private function saveInvoiceDesign()
{
if (!Auth::user()->account->isPro())
{
$account = Auth::user()->account;
$account->primary_color = Input::get('primary_color');// ? Input::get('primary_color') : null;
$account->secondary_color = Input::get('secondary_color');// ? Input::get('secondary_color') : null;
$account->save();
Session::flash('message', trans('texts.updated_settings'));
}
Session::flash('message', trans('texts.updated_settings'));
return Redirect::to('company/advanced_settings'); return Redirect::to('company/advanced_settings');
} }

View File

@ -38,7 +38,7 @@ class PaymentController extends \BaseController
} }
$table->addColumn('transaction_reference', function($model) { return $model->transaction_reference ? $model->transaction_reference : '<i>Manual entry</i>'; }) $table->addColumn('transaction_reference', function($model) { return $model->transaction_reference ? $model->transaction_reference : '<i>Manual entry</i>'; })
->addColumn('payment_type', function($model) { return $model->payment_type ? $model->payment_type : ($model->transaction_reference ? '<i>Online payment</i>' : ''); }); ->addColumn('payment_type', function($model) { return $model->payment_type ? $model->payment_type : ($model->account_gateway_id ? '<i>Online payment</i>' : ''); });
return $table->addColumn('amount', function($model) { return Utils::formatMoney($model->amount, $model->currency_id); }) return $table->addColumn('amount', function($model) { return Utils::formatMoney($model->amount, $model->currency_id); })
->addColumn('payment_date', function($model) { return Utils::dateToString($model->payment_date); }) ->addColumn('payment_date', function($model) { return Utils::dateToString($model->payment_date); })

View File

@ -24,54 +24,58 @@ class ReportController extends \BaseController {
$datasets = []; $datasets = [];
$labels = []; $labels = [];
$maxTotals = 0; $maxTotals = 0;
$width = 10;
foreach ([ENTITY_INVOICE, ENTITY_PAYMENT, ENTITY_CREDIT] as $entityType) if (Auth::user()->account->isPro())
{ {
$records = DB::table($entityType.'s') foreach ([ENTITY_INVOICE, ENTITY_PAYMENT, ENTITY_CREDIT] as $entityType)
->select(DB::raw('sum(amount) as total, '.$groupBy.'('.$entityType.'_date) as '.$groupBy))
->where($entityType.'s.deleted_at', '=', null)
->where($entityType.'s.'.$entityType.'_date', '>=', $startDate->format('Y-m-d'))
->where($entityType.'s.'.$entityType.'_date', '<=', $endDate->format('Y-m-d'))
->groupBy($groupBy);
$totals = $records->lists('total');
$dates = $records->lists($groupBy);
$data = array_combine($dates, $totals);
$interval = new DateInterval('P1'.substr($groupBy, 0, 1));
$period = new DatePeriod($startDate, $interval, $endDate);
$totals = [];
foreach ($period as $d)
{ {
$dateFormat = $groupBy == 'DAYOFYEAR' ? 'z' : ($groupBy == 'WEEK' ? 'W' : 'n'); $records = DB::table($entityType.'s')
$date = $d->format($dateFormat); ->select(DB::raw('sum(amount) as total, '.$groupBy.'('.$entityType.'_date) as '.$groupBy))
$totals[] = isset($data[$date]) ? $data[$date] : 0; ->where($entityType.'s.deleted_at', '=', null)
->where($entityType.'s.'.$entityType.'_date', '>=', $startDate->format('Y-m-d'))
->where($entityType.'s.'.$entityType.'_date', '<=', $endDate->format('Y-m-d'))
->groupBy($groupBy);
if ($entityType == ENTITY_INVOICE) $totals = $records->lists('total');
$dates = $records->lists($groupBy);
$data = array_combine($dates, $totals);
$interval = new DateInterval('P1'.substr($groupBy, 0, 1));
$period = new DatePeriod($startDate, $interval, $endDate);
$totals = [];
foreach ($period as $d)
{ {
$labelFormat = $groupBy == 'DAYOFYEAR' ? 'j' : ($groupBy == 'WEEK' ? 'W' : 'F'); $dateFormat = $groupBy == 'DAYOFYEAR' ? 'z' : ($groupBy == 'WEEK' ? 'W' : 'n');
$label = $d->format($labelFormat); $date = $d->format($dateFormat);
$labels[] = $label; $totals[] = isset($data[$date]) ? $data[$date] : 0;
if ($entityType == ENTITY_INVOICE)
{
$labelFormat = $groupBy == 'DAYOFYEAR' ? 'j' : ($groupBy == 'WEEK' ? 'W' : 'F');
$label = $d->format($labelFormat);
$labels[] = $label;
}
}
$max = max($totals);
if ($max > 0)
{
$datasets[] = [
'totals' => $totals,
'colors' => $entityType == ENTITY_INVOICE ? '78,205,196' : ($entityType == ENTITY_CREDIT ? '199,244,100' : '255,107,107')
];
$maxTotals = max($max, $maxTotals);
} }
} }
$max = max($totals); $width = (ceil( $maxTotals / 100 ) * 100) / 10;
$width = max($width, 10);
if ($max > 0)
{
$datasets[] = [
'totals' => $totals,
'colors' => $entityType == ENTITY_INVOICE ? '78,205,196' : ($entityType == ENTITY_CREDIT ? '199,244,100' : '255,107,107')
];
$maxTotals = max($max, $maxTotals);
}
} }
$width = (ceil( $maxTotals / 100 ) * 100) / 10;
$width = max($width, 10);
$dateTypes = [ $dateTypes = [
'DAYOFYEAR' => 'Daily', 'DAYOFYEAR' => 'Daily',
'WEEK' => 'Weekly', 'WEEK' => 'Weekly',
@ -92,7 +96,8 @@ class ReportController extends \BaseController {
'chartType' => $chartType, 'chartType' => $chartType,
'startDate' => $startDate->format(Session::get(SESSION_DATE_FORMAT)), 'startDate' => $startDate->format(Session::get(SESSION_DATE_FORMAT)),
'endDate' => $endDate->modify('-1'.$padding)->format(Session::get(SESSION_DATE_FORMAT)), 'endDate' => $endDate->modify('-1'.$padding)->format(Session::get(SESSION_DATE_FORMAT)),
'groupBy' => $groupBy 'groupBy' => $groupBy,
'feature' => ACCOUNT_CHART_BUILDER,
]; ];
return View::make('reports.report_builder', $params); return View::make('reports.report_builder', $params);

View File

@ -46,6 +46,7 @@ class ConstantsSeeder extends Seeder
PaymentType::create(array('name' => 'Credit Card Other')); PaymentType::create(array('name' => 'Credit Card Other'));
PaymentType::create(array('name' => 'PayPal')); PaymentType::create(array('name' => 'PayPal'));
PaymentType::create(array('name' => 'Google Wallet')); PaymentType::create(array('name' => 'Google Wallet'));
PaymentType::create(array('name' => 'Check'));
Theme::create(array('name' => 'amelia')); Theme::create(array('name' => 'amelia'));
Theme::create(array('name' => 'cerulean')); Theme::create(array('name' => 'cerulean'));

View File

@ -348,5 +348,7 @@ return array(
'specify_colors' => 'Specify colors', 'specify_colors' => 'Specify colors',
'specify_colors_label' => 'Select the colors used in the invoice', 'specify_colors_label' => 'Select the colors used in the invoice',
'chart_builder' => 'Chart Builder',
); );

View File

@ -219,7 +219,7 @@ class Utils
return $date->format($format); return $date->format($format);
} }
public static function toSqlDate($date) public static function toSqlDate($date, $formatResult = true)
{ {
if (!$date) if (!$date)
{ {
@ -229,10 +229,12 @@ class Utils
$timezone = Session::get(SESSION_TIMEZONE); $timezone = Session::get(SESSION_TIMEZONE);
$format = Session::get(SESSION_DATE_FORMAT); $format = Session::get(SESSION_DATE_FORMAT);
return DateTime::createFromFormat($format, $date, new DateTimeZone($timezone))->format('Y-m-d');
$dateTime = DateTime::createFromFormat($format, $date, new DateTimeZone($timezone));
return $formatResult ? $dateTime->format('Y-m-d') : $dateTime;
} }
public static function fromSqlDate($date) public static function fromSqlDate($date, $formatResult = true)
{ {
if (!$date || $date == '0000-00-00') if (!$date || $date == '0000-00-00')
{ {
@ -242,7 +244,8 @@ class Utils
$timezone = Session::get(SESSION_TIMEZONE); $timezone = Session::get(SESSION_TIMEZONE);
$format = Session::get(SESSION_DATE_FORMAT); $format = Session::get(SESSION_DATE_FORMAT);
return DateTime::createFromFormat('Y-m-d', $date, new DateTimeZone($timezone))->format($format); $dateTime = DateTime::createFromFormat('Y-m-d', $date, new DateTimeZone($timezone));
return $formatResult ? $dateTime->format($format) : $dateTime;
} }
public static function today($formatResult = true) public static function today($formatResult = true)

View File

@ -198,6 +198,7 @@ class AccountRepository
$client = new Client; $client = new Client;
$client->public_id = Auth::user()->account_id; $client->public_id = Auth::user()->account_id;
$client->user_id = $ninjaAccount->users()->first()->id; $client->user_id = $ninjaAccount->users()->first()->id;
$client->currency_id = 1;
foreach (['name', 'address1', 'address2', 'city', 'state', 'postal_code', 'country_id', 'work_phone'] as $field) foreach (['name', 'address1', 'address2', 'city', 'state', 'postal_code', 'country_id', 'work_phone'] as $field)
{ {
$client->$field = Auth::user()->account->$field; $client->$field = Auth::user()->account->$field;

View File

@ -99,6 +99,7 @@ class PaymentRepository
$payment->payment_type_id = $paymentTypeId; $payment->payment_type_id = $paymentTypeId;
$payment->payment_date = Utils::toSqlDate($input['payment_date']); $payment->payment_date = Utils::toSqlDate($input['payment_date']);
$payment->amount = $amount; $payment->amount = $amount;
$payment->transaction_reference = trim($input['transaction_reference']);
$payment->save(); $payment->save();
return $payment; return $payment;

View File

@ -11,8 +11,6 @@
| |
*/ */
//apc_clear_cache(); //apc_clear_cache();
//Cache::flush(); //Cache::flush();
@ -74,9 +72,12 @@ Route::group(array('before' => 'auth'), function()
Route::post('company/products/{product_id?}', 'AccountController@saveProduct'); Route::post('company/products/{product_id?}', 'AccountController@saveProduct');
*/ */
Route::get('company/advanced_settings/chart_builder', 'ReportController@report');
Route::post('company/advanced_settings/chart_builder', 'ReportController@report');
Route::get('account/getSearchData', array('as' => 'getSearchData', 'uses' => 'AccountController@getSearchData')); Route::get('account/getSearchData', array('as' => 'getSearchData', 'uses' => 'AccountController@getSearchData'));
Route::get('company/{section?}', 'AccountController@showSection'); Route::get('company/{section?}/{sub_section?}', 'AccountController@showSection');
Route::post('company/{section?}', 'AccountController@doSection'); Route::post('company/{section?}/{sub_section?}', 'AccountController@doSection');
Route::post('user/setTheme', 'UserController@setTheme'); Route::post('user/setTheme', 'UserController@setTheme');
Route::post('remove_logo', 'AccountController@removeLogo'); Route::post('remove_logo', 'AccountController@removeLogo');
Route::post('account/go_pro', 'AccountController@enableProPlan'); Route::post('account/go_pro', 'AccountController@enableProPlan');
@ -105,18 +106,16 @@ Route::group(array('before' => 'auth'), function()
Route::get('credits/create/{client_id?}/{invoice_id?}', 'CreditController@create'); Route::get('credits/create/{client_id?}/{invoice_id?}', 'CreditController@create');
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::post('credits/bulk', 'CreditController@bulk'); Route::post('credits/bulk', 'CreditController@bulk');
Route::get('reports', 'ReportController@report');
Route::post('reports', 'ReportController@report');
}); });
// If you're self hosting set this to a value you think is fair
define('PRO_PLAN_PRICE', 50);
define('CONTACT_EMAIL', 'contact@invoiceninja.com'); define('CONTACT_EMAIL', 'contact@invoiceninja.com');
define('CONTACT_NAME', 'Invoice Ninja'); define('CONTACT_NAME', 'Invoice Ninja');
define('SITE_URL', 'https://www.invoiceninja.com'); define('SITE_URL', 'https://www.invoiceninja.com');
define('ENV_DEVELOPMENT', 'local'); define('ENV_DEVELOPMENT', 'local');
define('ENV_STAGING', 'staging'); define('ENV_STAGING', 'staging');
define('ENV_PRODUCTION', 'fortrabbit'); define('ENV_PRODUCTION', 'fortrabbit');
@ -137,8 +136,12 @@ define('ACCOUNT_IMPORT_EXPORT', 'import_export');
define('ACCOUNT_PAYMENTS', 'payments'); define('ACCOUNT_PAYMENTS', 'payments');
define('ACCOUNT_MAP', 'import_map'); define('ACCOUNT_MAP', 'import_map');
define('ACCOUNT_EXPORT', 'export'); define('ACCOUNT_EXPORT', 'export');
define('ACCOUNT_ADVANCED_SETTINGS', 'advanced_settings');
define('ACCOUNT_PRODUCTS', 'products'); define('ACCOUNT_PRODUCTS', 'products');
define('ACCOUNT_ADVANCED_SETTINGS', 'advanced_settings');
define('ACCOUNT_CUSTOM_FIELDS', 'custom_fields');
define('ACCOUNT_INVOICE_DESIGN', 'invoice_design');
define('ACCOUNT_CHART_BUILDER', 'chart_builder');
define('DEFAULT_INVOICE_NUMBER', '0001'); define('DEFAULT_INVOICE_NUMBER', '0001');
define('RECENTLY_VIEWED_LIMIT', 8); define('RECENTLY_VIEWED_LIMIT', 8);
@ -191,7 +194,6 @@ define('GATEWAY_PAYPAL_EXPRESS', 17);
define('GATEWAY_BEANSTREAM', 29); define('GATEWAY_BEANSTREAM', 29);
define('GATEWAY_PSIGATE', 30); define('GATEWAY_PSIGATE', 30);
define('PRO_PLAN_PRICE', 50);
define('REQUESTED_PRO_PLAN', 'REQUESTED_PRO_PLAN'); define('REQUESTED_PRO_PLAN', 'REQUESTED_PRO_PLAN');
define('NINJA_ACCOUNT_KEY', 'zg4ylmzDkdkPOT8yoKQw9LTWaoZJx79h'); define('NINJA_ACCOUNT_KEY', 'zg4ylmzDkdkPOT8yoKQw9LTWaoZJx79h');
define('NINJA_GATEWAY_ID', GATEWAY_AUTHORIZE_NET); define('NINJA_GATEWAY_ID', GATEWAY_AUTHORIZE_NET);
@ -225,7 +227,7 @@ HTML::macro('menu_link', function($type) {
$types = $type.'s'; $types = $type.'s';
$Type = ucfirst($type); $Type = ucfirst($type);
$Types = ucfirst($types); $Types = ucfirst($types);
$class = ( Request::is($types) || Request::is('*'.$type.'*')) ? ' active' : ''; $class = ( Request::is($types) || Request::is('*'.$type.'*')) && !Request::is('*advanced_settings*') ? ' active' : '';
return '<li class="dropdown '.$class.'"> return '<li class="dropdown '.$class.'">
<a href="'.URL::to($types).'" class="dropdown-toggle">'.trans("texts.$types").'</a> <a href="'.URL::to($types).'" class="dropdown-toggle">'.trans("texts.$types").'</a>

View File

@ -2,16 +2,7 @@
@section('content') @section('content')
@parent @parent
@include('accounts.nav_advanced')
@if (!Auth::user()->account->isPro())
<div class="container">
<div class="row">
<div style="font-size:larger;" class="col-md-8 col-md-offset-2">{{ trans('texts.pro_plan_advanced_settings', ['link'=>'<a href="#" onclick="showProPlan()">'.trans('texts.pro_plan.remove_logo_link').'</a>']) }}</div>
&nbsp;<p/>&nbsp;
</div>
</div>
@endif
{{ Former::open()->addClass('col-md-8 col-md-offset-2 warn-on-exit') }} {{ Former::open()->addClass('col-md-8 col-md-offset-2 warn-on-exit') }}
{{ Former::populate($account) }} {{ Former::populate($account) }}
@ -27,10 +18,6 @@
{{ Former::text('custom_client_label1')->label(trans('texts.field_label')) }} {{ Former::text('custom_client_label1')->label(trans('texts.field_label')) }}
{{ Former::text('custom_client_label2')->label(trans('texts.field_label')) }} {{ Former::text('custom_client_label2')->label(trans('texts.field_label')) }}
{{ Former::legend('invoice_design') }}
{{ Former::text('primary_color') }}
{{ Former::text('secondary_color') }}
@if (Auth::user()->isPro()) @if (Auth::user()->isPro())
{{ Former::actions( Button::lg_success_submit(trans('texts.save'))->append_with_icon('floppy-disk') ) }} {{ Former::actions( Button::lg_success_submit(trans('texts.save'))->append_with_icon('floppy-disk') ) }}
@else @else
@ -43,20 +30,4 @@
{{ Former::close() }} {{ Former::close() }}
<script>
$(function() {
var options = {
preferredFormat: "hex",
disabled: {{ Auth::user()->isPro() ? 'false' : 'true' }},
showInitial: false,
showInput: true,
allowEmpty: true,
clickoutFiresChange: true,
};
$('#primary_color').spectrum(options);
$('#secondary_color').spectrum(options);
});
</script>
@stop @stop

View File

@ -0,0 +1,42 @@
@extends('accounts.nav')
@section('content')
@parent
@include('accounts.nav_advanced')
{{ Former::open()->addClass('col-md-8 col-md-offset-2 warn-on-exit') }}
{{ Former::populate($account) }}
{{ Former::legend('invoice_design') }}
{{ Former::text('primary_color') }}
{{ Former::text('secondary_color') }}
@if (Auth::user()->isPro())
{{ Former::actions( Button::lg_success_submit(trans('texts.save'))->append_with_icon('floppy-disk') ) }}
@else
<script>
$(function() {
$('form.warn-on-exit input').prop('disabled', true);
});
</script>
@endif
{{ Former::close() }}
<script>
$(function() {
var options = {
preferredFormat: "hex",
disabled: {{ Auth::user()->isPro() ? 'false' : 'true' }},
showInitial: false,
showInput: true,
allowEmpty: true,
clickoutFiresChange: true,
};
$('#primary_color').spectrum(options);
$('#secondary_color').spectrum(options);
});
</script>
@stop

View File

@ -3,13 +3,14 @@
@section('content') @section('content')
<ul class="nav nav-tabs nav nav-justified"> <ul class="nav nav-tabs nav nav-justified">
{{ HTML::nav_link('company/details', 'company_details') }} {{ HTML::nav_link('company/details', 'company_details') }}
{{ HTML::nav_link('company/payments', 'online_payments') }} {{ HTML::nav_link('company/payments', 'online_payments') }}
{{ HTML::nav_link('company/products', 'product_library') }} {{ HTML::nav_link('company/products', 'product_library') }}
{{ HTML::nav_link('company/notifications', 'notifications') }} {{ HTML::nav_link('company/notifications', 'notifications') }}
{{ HTML::nav_link('company/import_export', 'import_export', 'company/import_map') }} {{ HTML::nav_link('company/import_export', 'import_export', 'company/import_map') }}
{{ HTML::nav_link('company/advanced_settings', 'advanced_settings') }} {{ HTML::nav_link('company/advanced_settings/custom_fields', 'advanced_settings', '*/advanced_settings/*') }}
</ul> </ul>
<p>&nbsp;</p>
<br/>
@stop @stop

View File

@ -0,0 +1,17 @@
<ul class="nav nav-tabs nav nav-justified">
{{ HTML::nav_link('company/advanced_settings/custom_fields', 'custom_fields') }}
{{ HTML::nav_link('company/advanced_settings/invoice_design', 'invoice_design') }}
{{ HTML::nav_link('company/advanced_settings/chart_builder', 'chart_builder') }}
</ul>
<p>&nbsp;</p>
@if (!Auth::user()->account->isPro())
<div class="container">
<div class="row">
<div style="font-size:larger;" class="col-md-8 col-md-offset-2">{{ trans('texts.pro_plan_advanced_settings', ['link'=>'<a href="#" onclick="showProPlan(\''.$feature.'\')">'.trans('texts.pro_plan.remove_logo_link').'</a>']) }}</div>
&nbsp;<p/>&nbsp;
</div>
</div>
@endif
<br/>

View File

@ -95,7 +95,7 @@
var contents = $(this).parent().contents(); var contents = $(this).parent().contents();
contents[contents.length - 1].nodeValue = ''; contents[contents.length - 1].nodeValue = '';
$(this).after('<img src="' +$(this).attr('data-imageUrl') + '" /><br />'); $(this).after('<img src="' +$(this).attr('data-imageUrl') + '" /><br />');
$(this).parent().children().last().after('<a href="' + $(this).attr('data-siteUrl') + '">Create an account</a>'); $(this).parent().children().last().after('<a href="#" onclick="openUrl(\'' + $(this).attr('data-siteUrl') + '\')">Create an account</a>');
}); });

View File

@ -113,7 +113,6 @@
{{ HTML::menu_link('invoice') }} {{ HTML::menu_link('invoice') }}
{{ HTML::menu_link('payment') }} {{ HTML::menu_link('payment') }}
{{ HTML::menu_link('credit') }} {{ HTML::menu_link('credit') }}
{{-- HTML::nav_link('reports', 'Reports') --}}
</ul> </ul>
<div class="navbar-form navbar-right"> <div class="navbar-form navbar-right">
@ -152,7 +151,7 @@
<li>{{ link_to('company/products', uctrans('texts.product_library')) }}</li> <li>{{ link_to('company/products', uctrans('texts.product_library')) }}</li>
<li>{{ link_to('company/notifications', uctrans('texts.notifications')) }}</li> <li>{{ link_to('company/notifications', uctrans('texts.notifications')) }}</li>
<li>{{ link_to('company/import_export', uctrans('texts.import_export')) }}</li> <li>{{ link_to('company/import_export', uctrans('texts.import_export')) }}</li>
<li><a href="{{ url('company/advanced_settings') }}">{{ uctrans('texts.advanced_settings') . Utils::getProLabel(ACCOUNT_ADVANCED_SETTINGS) }}</a></li> <li><a href="{{ url('company/advanced_settings/custom_fields') }}">{{ uctrans('texts.advanced_settings') . Utils::getProLabel(ACCOUNT_ADVANCED_SETTINGS) }}</a></li>
<li class="divider"></li> <li class="divider"></li>
<li>{{ link_to('#', trans('texts.logout'), array('onclick'=>'logout()')) }}</li> <li>{{ link_to('#', trans('texts.logout'), array('onclick'=>'logout()')) }}</li>
@ -376,61 +375,9 @@ Want something changed? We're {{ link_to('https://github.com/hillelcoren/invoice
</div> </div>
</div> </div>
</div> </div>
<div class="container">
<div class="row">
<div class="plans-table col-md-9">
<div class="col-md-4 desc hide-mobile">
<div class="cell"></div>
<div class="cell">Number of clients per account</div>
<div class="cell">Unlimited client invoices</div>
<div class="cell">Add your company logo</div>
<div class="cell">Live .PDF invoice creation </div>
<div class="cell">4 beatiful invoice templates</div>
<div class="cell">Accept credit card payments</div>
<div class="cell">Custom invoice fields</div>
<div class="cell">Priority email support</div>
<div class="cell">Custom invoice colors</div>
<div class="cell">Remove "Created by Invoice Ninja"</div>
<div class="cell">Pricing</div>
@include('plans')
</div> &nbsp;
<div class="free col-md-4">
<div class="cell">Free</div>
<div class="cell"><div class="hide-desktop">Number of clients per account</div><span>500</span></div>
<div class="cell"><div class="hide-desktop">Unlimited client invoices</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Add your company logo</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Live .PDF invoice creation</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">4 beatiful invoice templates</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Accept credit card payments</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Custom invoice fields</div><span class="glyphicon glyphicon-remove"></div>
<div class="cell"><div class="hide-desktop">Priority email support</div><span class="glyphicon glyphicon-remove"></div>
<div class="cell"><div class="hide-desktop">Custom invoice colors</div><span class="glyphicon glyphicon-remove"></div>
<div class="cell"><div class="hide-desktop">Remove "Created by Invoice Ninja"</div><span class="glyphicon glyphicon-remove"></div>
<div class="cell price"><div class="hide-desktop">Pricing</div><p>Free<span> /Always!</span></p></div>
</div>
<div class="pro col-md-4">
<div class="cell">Pro Plan<span class="glyphicon glyphicon-star"></div>
<div class="cell"><div class="hide-desktop">Number of clients per account</div><span style="color: #2299c0; font-size: 16px;">5,000</span></div>
<div class="cell"><div class="hide-desktop">Unlimited client invoices</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Add your company logo</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Live .PDF invoice creation</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">4 beatiful invoice templates</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Accept credit card payments</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Custom invoice fields</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Priority email support</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Custom invoice colors</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Remove "Created by Invoice Ninja"</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell price"><div class="hide-desktop">Pricing</div><p>$50<span> /Year</span></p></div>
</a>
</div>
</div>
</div>
</section>
&nbsp;
</div> </div>
@ -542,6 +489,7 @@ Want something changed? We're {{ link_to('https://github.com/hillelcoren/invoice
'&new_last_name=' + encodeURIComponent($('form.signUpForm #new_last_name').val()) + '&new_last_name=' + encodeURIComponent($('form.signUpForm #new_last_name').val()) +
'&go_pro=' + $('#go_pro').val(), '&go_pro=' + $('#go_pro').val(),
success: function(result) { success: function(result) {
trackUrl('/signed_up');
if (result) { if (result) {
localStorage.setItem('guest_key', ''); localStorage.setItem('guest_key', '');
NINJA.isRegistered = true; NINJA.isRegistered = true;
@ -577,13 +525,21 @@ Want something changed? We're {{ link_to('https://github.com/hillelcoren/invoice
} }
} }
function showSignUp() {
$('#signUpModal').modal('show');
trackUrl('/view_sign_up');
}
@if (Auth::check() && !Auth::user()->isPro()) @if (Auth::check() && !Auth::user()->isPro())
function showProPlan() { var proPlanFeature = false;
function showProPlan(feature) {
proPlanFeature = feature;
$('#proPlanModal').modal('show'); $('#proPlanModal').modal('show');
trackUrl('/view_pro_plan/' + feature);
} }
function submitProPlan() { function submitProPlan() {
trackUrl('/submit_pro_plan/' + proPlanFeature);
if (NINJA.isRegistered) { if (NINJA.isRegistered) {
$('#proPlanDiv, #proPlanFooter').hide(); $('#proPlanDiv, #proPlanFooter').hide();
$('#proPlanWorking').show(); $('#proPlanWorking').show();

View File

@ -276,7 +276,7 @@
@if (!Auth::user()->account->isPro()) @if (!Auth::user()->account->isPro())
<div style="font-size:larger"> <div style="font-size:larger">
{{ trans('texts.pro_plan.remove_logo', ['link'=>'<a href="#" onclick="showProPlan()">'.trans('texts.pro_plan.remove_logo_link').'</a>']) }} {{ trans('texts.pro_plan.remove_logo', ['link'=>'<a href="#" onclick="showProPlan(\'remove_logo\')">'.trans('texts.pro_plan.remove_logo_link').'</a>']) }}
</div> </div>
@endif @endif
@ -449,10 +449,6 @@
<script type="text/javascript"> <script type="text/javascript">
function showSignUp() {
$('#signUpModal').modal('show');
}
function showLearnMore() { function showLearnMore() {
$('#recurringModal').modal('show'); $('#recurringModal').modal('show');
} }

View File

@ -1,23 +1,22 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<title>Invoice Ninja {{ isset($title) ? $title : ' - Free Online Invoicing' }}</title> <title>Invoice Ninja {{ isset($title) ? $title : ' - Free Online Invoicing' }}</title>
<link rel="canonical" href="https://www.invoiceninja.com"></link>
<link href="{{ asset('favicon.ico') }}" rel="icon" type="image/x-icon">
<link href='//fonts.googleapis.com/css?family=Roboto:400,700,900,100' rel='stylesheet' type='text/css'>
<link href='//fonts.googleapis.com/css?family=Roboto+Slab:400,300,700' rel='stylesheet' type='text/css'>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:site_name" content="Invoice Ninja"></meta> <meta property="og:site_name" content="Invoice Ninja"></meta>
<meta property="og:url" content="https://www.invoiceninja.com"></meta> <meta property="og:url" content="https://www.invoiceninja.com"></meta>
<meta property="og:title" content="Invoice Ninja"></meta> <meta property="og:title" content="Invoice Ninja"></meta>
<meta property="og:image" content="https://www.invoiceninja.com/images/social.jpg"></meta> <meta property="og:image" content="https://www.invoiceninja.com/images/social.jpg"></meta>
<meta property="og:description" content="Simple, Intuitive Invoicing."></meta> <meta property="og:description" content="Simple, Intuitive Invoicing."></meta>
<meta name="keywords" content="Invoice Ninja"></meta>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href='//fonts.googleapis.com/css?family=Roboto:400,700,900,100' rel='stylesheet' type='text/css'>
<link href='//fonts.googleapis.com/css?family=Roboto+Slab:400,300,700' rel='stylesheet' type='text/css'>
<link href="{{ asset('favicon.ico') }}" rel="icon" type="image/x-icon">
<link href="https://www.invoiceninja.com" rel="canonical"></link>
<script src="{{ asset('built.js') }}" type="text/javascript"></script> <script src="{{ asset('built.js') }}" type="text/javascript"></script>
@ -52,7 +51,7 @@
<body> <body>
@if (App::environment() == ENV_PRODUCTION && isset($_ENV['ANALYTICS_KEY']) && $_ENV['ANALYTICS_KEY']) @if (isset($_ENV['ANALYTICS_KEY']) && $_ENV['ANALYTICS_KEY'])
<script> <script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

View File

@ -11,7 +11,7 @@
{{ Former::open($url)->addClass('col-md-10 col-md-offset-1 warn-on-exit')->method($method)->rules(array( {{ Former::open($url)->addClass('col-md-10 col-md-offset-1 warn-on-exit')->method($method)->rules(array(
'client' => 'required', 'client' => 'required',
'invoice' => 'required', 'invoice' => 'required',
'amount' => 'required', 'amount' => 'required',
)); }} )); }}
<div class="row"> <div class="row">
@ -23,6 +23,7 @@
{{ Former::select('payment_type_id')->addOption('','') {{ Former::select('payment_type_id')->addOption('','')
->fromQuery($paymentTypes, 'name', 'id') }} ->fromQuery($paymentTypes, 'name', 'id') }}
{{ Former::text('payment_date')->data_date_format(Session::get(SESSION_DATE_PICKER_FORMAT))->append('<i class="glyphicon glyphicon-calendar"></i>') }} {{ Former::text('payment_date')->data_date_format(Session::get(SESSION_DATE_PICKER_FORMAT))->append('<i class="glyphicon glyphicon-calendar"></i>') }}
{{ Former::text('transaction_reference') }}
{{-- Former::select('currency_id')->addOption('','') {{-- Former::select('currency_id')->addOption('','')
->fromQuery($currencies, 'name', 'id')->select(Session::get(SESSION_CURRENCY, DEFAULT_CURRENCY)) --}} ->fromQuery($currencies, 'name', 'id')->select(Session::get(SESSION_CURRENCY, DEFAULT_CURRENCY)) --}}

54
app/views/plans.blade.php Normal file
View File

@ -0,0 +1,54 @@
<div class="container">
<div class="row">
<div class="plans-table col-md-9">
<div class="col-md-4 desc hide-mobile">
<div class="cell"></div>
<div class="cell">Number of clients per account</div>
<div class="cell">Unlimited client invoices</div>
<div class="cell">Add your company logo</div>
<div class="cell">Live .PDF invoice creation </div>
<div class="cell">4 beatiful invoice templates</div>
<div class="cell">Accept credit card payments</div>
<div class="cell">Custom invoice fields and colors</div>
<div class="cell">Basic chart builder</div>
<div class="cell">Priority email support</div>
<div class="cell">Remove "Created by Invoice Ninja"</div>
<div class="cell">Latest and greatest features</div>
<div class="cell">Pricing</div>
</div>
<div class="free col-md-4">
<div class="cell">Free</div>
<div class="cell"><div class="hide-desktop">Number of clients per account</div><span>500</span></div>
<div class="cell"><div class="hide-desktop">Unlimited client invoices</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Add your company logo</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Live .PDF invoice creation</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">4 beatiful invoice templates</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Accept credit card payments</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Custom fields and invoice colors</div><span class="glyphicon glyphicon-remove"></div>
<div class="cell"><div class="hide-desktop">Basic chart builder</div><span class="glyphicon glyphicon-remove"></div>
<div class="cell"><div class="hide-desktop">Priority email support</div><span class="glyphicon glyphicon-remove"></div>
<div class="cell"><div class="hide-desktop">Remove "Created by Invoice Ninja"</div><span class="glyphicon glyphicon-remove"></div>
<div class="cell"><div class="hide-desktop">Latest and greatest features</div><span class="glyphicon glyphicon-remove"></div>
<div class="cell price"><div class="hide-desktop">Pricing</div><p>Free<span> /Always!</span></p></div>
</div>
<div class="pro col-md-4">
<div class="cell">Pro Plan<span class="glyphicon glyphicon-star"></div>
<div class="cell"><div class="hide-desktop">Number of clients per account</div><span style="color: #2299c0; font-size: 16px;">5,000</span></div>
<div class="cell"><div class="hide-desktop">Unlimited client invoices</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Add your company logo</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Live .PDF invoice creation</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">4 beatiful invoice templates</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Accept credit card payments</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Custom invoice fields and colors</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Basic chart builder</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Priority email support</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Remove "Created by Invoice Ninja"</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Latest and greatest features</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell price"><div class="hide-desktop">Pricing</div><p>$50<span> /Year</span></p></div>
<!-- <div class="cell"><a href="#"><div class="cta"><h2 onclick="return getStarted()">GO PRO <span>+</span></h2></div> </a>-->
</div>
</div>
</div>
</div>

View File

@ -105,7 +105,6 @@ var contactForm = {
<div class="col-md-4 col-md-offset-1 address"> <div class="col-md-4 col-md-offset-1 address">
<h2>Other ways to reach us</h2> <h2>Other ways to reach us</h2>
<p><span class="glyphicon glyphicon-send"></span><a href="mailto:contact@invoiceninja.com">contact@invoiceninja.com</a></p> <p><span class="glyphicon glyphicon-send"></span><a href="mailto:contact@invoiceninja.com">contact@invoiceninja.com</a></p>
<p><span class="glyphicon glyphicon-earphone"></span>+1-800-763-1948</p>
<p><span class="glyphicon glyphicon-comment"></span><a href="http://www.invoiceninja.org" target="_blank">Google Group</a></p> <p><span class="glyphicon glyphicon-comment"></span><a href="http://www.invoiceninja.org" target="_blank">Google Group</a></p>
<p><span class="github"></span><div style="padding-top:10px"> &nbsp;&nbsp;<a href="https://github.com/hillelcoren/invoice-ninja" target="_blank">GitHub Project</a></div></p> <p><span class="github"></span><div style="padding-top:10px"> &nbsp;&nbsp;<a href="https://github.com/hillelcoren/invoice-ninja" target="_blank">GitHub Project</a></div></p>

View File

@ -4,87 +4,87 @@
<section class="hero background hero-features center" data-speed="2" data-type="background"> <section class="hero background hero-features center" data-speed="2" data-type="background">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<h1><img src="{{ asset('images/icon-features.png') }}"><span class="thin">THE</span> FEATURES</h1> <h1><img src="{{ asset('images/icon-features.png') }}"><span class="thin">THE</span> FEATURES</h1>
</div> </div>
</div> </div>
</section> </section>
<section class="features features1"> <section class="features features1">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-md-5 valign"> <div class="col-md-5 valign">
<div class="headline"> <div class="headline">
<div class="icon open"><span class="img-wrap"><img src="{{ asset('images/icon-opensource.png') }}"></span></div><h2>Open Source Platform</h2> <div class="icon open"><span class="img-wrap"><img src="{{ asset('images/icon-opensource.png') }}"></span></div><h2>Open Source Platform</h2>
</div>
<p class="first">Set the code free! Here at Invoice Ninja, were all about being non-evil, and providing full code transparency is a central manifestation of this value.</p>
<p>Our users started seeing the benefits of open source within days of our launch, when we rolled out v1.0.2, which included some key code improvements that our friends on GitHub sent our way.
</p>
<p>We firmly believe that being an open source product helps everyone involved. Were looking forward to seeing what the developers out there can do to take Invoice Ninja into new realms of usefulness.</p>
</div>
<div class="col-md-7">
<img src="{{ asset('images/features1.jpg') }}">
</div> </div>
<p class="first">Set the code free! Here at Invoice Ninja, were all about being non-evil, and providing full code transparency is a central manifestation of this value.</p>
<p>Our users started seeing the benefits of open source within days of our launch, when we rolled out v1.0.2, which included some key code improvements that our friends on GitHub sent our way.
</p>
<p>We firmly believe that being an open source product helps everyone involved. Were looking forward to seeing what the developers out there can do to take Invoice Ninja into new realms of usefulness.</p>
</div>
<div class="col-md-7">
<img src="{{ asset('images/features1.jpg') }}">
</div>
</div> </div>
</div> </div>
</section> </section>
<section class="blue features"> <section class="blue features">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-md-7"> <div class="col-md-7">
<img src="{{ asset('images/devices-2.png') }}"> <img src="{{ asset('images/devices-2.png') }}">
</div> </div>
<div class="col-md-5 valign"> <div class="col-md-5 valign">
<div class="headline"> <div class="headline">
<div class="icon free"><span class="img-wrap"><img src="{{ asset('images/icon-free2.png') }}"></span></div><h2>FREE. Forever.</h2> <div class="icon free"><span class="img-wrap"><img src="{{ asset('images/icon-free2.png') }}"></span></div><h2>FREE. Forever.</h2>
</div> </div>
<p class="first">Set the code free! Here at Invoice Ninja, were all about being non-evil, and providing full code transparency is a central manifestation of this value.</p> <p class="first">Set the code free! Here at Invoice Ninja, were all about being non-evil, and providing full code transparency is a central manifestation of this value.</p>
<p>Our users started seeing the benefits of open source within days of our launch, when we rolled out v1.0.2, which included some key code improvements that our friends on GitHub sent our way. <p>Our users started seeing the benefits of open source within days of our launch, when we rolled out v1.0.2, which included some key code improvements that our friends on GitHub sent our way.
</p> </p>
<p>We firmly believe that being an open source product helps everyone involved. Were looking forward to seeing what the developers out there can do to take Invoice Ninja into new realms of usefulness.</p> <p>We firmly believe that being an open source product helps everyone involved. Were looking forward to seeing what the developers out there can do to take Invoice Ninja into new realms of usefulness.</p>
</div> </div>
</div> </div>
</div> </div>
</section> </section>
<section class="features features3"> <section class="features features3">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-md-5"> <div class="col-md-5">
<div class="headline"> <div class="headline">
<div class="icon secure"><span class="img-wrap"><img src="{{ asset('images/icon-secure.png') }}"></span></div><h2>Secure & Private</h2> <div class="icon secure"><span class="img-wrap"><img src="{{ asset('images/icon-secure.png') }}"></span></div><h2>Secure & Private</h2>
</div>
<p class="first">Invoice Ninja has been built from the ground up to keep your data safe. Only you have access to your login & accounting details, & we will never share your transaction data to any third party.</p>
<p>Our website operates with 256-bit encryption, which is even more secure than most banking websites. Invoice Ninja uses the TLS 1.0 cryptographic protocol, AES_256_CBC string encryption, SHA1 message authentication and DHE_RSA key exchanges. We feel safe here and have invested heavily in measures to ensure that you do too.</p>
</div>
<div class="col-md-7 valign">
<img src="{{ asset('images/laptopwicon.jpg') }}">
</div> </div>
<p class="first">Invoice Ninja has been built from the ground up to keep your data safe. Only you have access to your login & accounting details, & we will never share your transaction data to any third party.</p>
<p>Our website operates with 256-bit encryption, which is even more secure than most banking websites. Invoice Ninja uses the TLS 1.0 cryptographic protocol, AES_256_CBC string encryption, SHA1 message authentication and DHE_RSA key exchanges. We feel safe here and have invested heavily in measures to ensure that you do too.</p>
</div>
<div class="col-md-7 valign">
<img src="{{ asset('images/laptopwicon.jpg') }}">
</div>
</div> </div>
</div> </div>
</section> </section>
<section class="features features4"> <section class="features features4">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-md-7"> <div class="col-md-7">
<img src="{{ asset('images/features4.jpg') }}"> <img src="{{ asset('images/features4.jpg') }}">
</div>
<div class="col-md-5 valign">
<div class="headline">
<div class="icon pdf"><span class="img-wrap"><img src="{{ asset('images/icon-pdf.png') }}"></span></div><h2>Live .PDF View</h2>
</div> </div>
<div class="col-md-5 valign"> <p class="first">With Invoice Ninja, weve done away with the need for cumbersome multi-click invoice previewing after each save.</p>
<div class="headline"> <p>When you enter the details of your customer and/or invoice in our editor, you can instantly see the results in the pdf preview pane below. Want to see what your invoice would look like in a different layout style? The live pdf can show you four beautiful preset styles in real time too.
<div class="icon pdf"><span class="img-wrap"><img src="{{ asset('images/icon-pdf.png') }}"></span></div><h2>Live .PDF View</h2> </p><p><i>Just create, save, send, and youre done!</i></p>
</div>
<p class="first">With Invoice Ninja, weve done away with the need for cumbersome multi-click invoice previewing after each save.</p>
<p>When you enter the details of your customer and/or invoice in our editor, you can instantly see the results in the pdf preview pane below. Want to see what your invoice would look like in a different layout style? The live pdf can show you four beautiful preset styles in real time too.
</p><p><i>Just create, save, send, and youre done!</i></p>
</div> </div>
</div> </div>
</div> </div>
</section> </section>
@ -92,24 +92,24 @@
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-md-5 valign"> <div class="col-md-5 valign">
<div class="headline"> <div class="headline">
<div class="icon pay"><span class="img-wrap"><img src="{{ asset('images/icon-payment.png') }}"></span></div><h2>Online Payments</h2> <div class="icon pay"><span class="img-wrap"><img src="{{ asset('images/icon-payment.png') }}"></span></div><h2>Online Payments</h2>
</div>
<p class="first">Invoice Ninja seamlessly integrates with all of the top internet payment processors and gateways so you can get paid for your work quickly and easily.</p>
<p>Invoices crated with our tools arent just for bookkeeping purposes - they bring in the Benjamins. We also make it super easy to choose the right gateway for the specific needs of your business and are happy to help you to get started working with the gateway of your choice. Whats more, were constantly working on rolling out additional gateway integrations, so if you dont see the one you use here, just let us know, and theres a good chance well add it for you. </p>
</div>
<div class="col-md-7">
<img src="{{ asset('images/features5.jpg') }}">
</div> </div>
<p class="first">Invoice Ninja seamlessly integrates with all of the top internet payment processors and gateways so you can get paid for your work quickly and easily.</p>
<p>Invoices crated with our tools arent just for bookkeeping purposes - they bring in the Benjamins. We also make it super easy to choose the right gateway for the specific needs of your business and are happy to help you to get started working with the gateway of your choice. Whats more, were constantly working on rolling out additional gateway integrations, so if you dont see the one you use here, just let us know, and theres a good chance well add it for you. </p>
</div>
<div class="col-md-7">
<img src="{{ asset('images/features5.jpg') }}">
</div>
</div> </div>
</div> </div>
</section> </section>
<section class="upper-footer features center"> <section class="upper-footer features center">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-md-4"> <div class="col-md-4">
<h2 class="thin">Like what you see?</h2> <h2 class="thin">Like what you see?</h2>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<a href="#"> <a href="#">
<div class="cta"> <div class="cta">

View File

@ -23,7 +23,7 @@
background-image: url({{ asset('/images/hero-bg-1.jpg') }}); background-image: url({{ asset('/images/hero-bg-1.jpg') }});
} }
.hero-about { .hero-about {
background-image: url({{ asset('/images/hero-bg-3.jpg.jpg') }}); background-image: url({{ asset('/images/hero-bg-4.jpg') }});
} }
.hero-plans { .hero-plans {
background-image: url({{ asset('/images/hero-bg-plans.jpg') }}); background-image: url({{ asset('/images/hero-bg-plans.jpg') }});
@ -98,6 +98,7 @@
<li>{{ link_to('about', 'About Us' ) }}</li> <li>{{ link_to('about', 'About Us' ) }}</li>
<li>{{ link_to('plans', 'Plans' ) }}</li> <li>{{ link_to('plans', 'Plans' ) }}</li>
<li>{{ link_to('contact', 'Contact Us' ) }}</li> <li>{{ link_to('contact', 'Contact Us' ) }}</li>
<li>{{ link_to('http://blog.invoiceninja.com', 'Blog' ) }}</li>
<li>{{ link_to('login', Auth::check() ? 'My Account' : 'Login' ) }}</li> <li>{{ link_to('login', Auth::check() ? 'My Account' : 'Login' ) }}</li>
</ul> </ul>
</div> </div>
@ -157,6 +158,7 @@
<li>{{ link_to('about', 'About Us' ) }}</li> <li>{{ link_to('about', 'About Us' ) }}</li>
<li>{{ link_to('plans', 'Plans' ) }}</li> <li>{{ link_to('plans', 'Plans' ) }}</li>
<li>{{ link_to('contact', 'Contact Us' ) }}</li> <li>{{ link_to('contact', 'Contact Us' ) }}</li>
<li>{{ link_to('http://blog.invoiceninja.com', 'Blog' ) }}</li>
<li>{{ link_to('login', Auth::check() ? 'My Account' : 'Login' ) }}</li> <li>{{ link_to('login', Auth::check() ? 'My Account' : 'Login' ) }}</li>
</ul> </ul>

View File

@ -2,15 +2,15 @@
@section('content') @section('content')
<section class="hero background hero-plans" data-speed="2" data-type="background"> <section class="hero background hero-plans" data-speed="2" data-type="background">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<h1><img src="{{ asset('images/icon-plans.png') }}"><span class="thin">The</span> plans</h1> <h1><img src="{{ asset('images/icon-plans.png') }}"><span class="thin">The</span> plans</h1>
</div> </div>
</div> </div>
</section> </section>
<section class="plans center"> <section class="plans center">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-md-8 col-md-offset-2"> <div class="col-md-8 col-md-offset-2">
@ -19,83 +19,27 @@
with the key features you need to bill your clients electronically. But for those who with the key features you need to bill your clients electronically. But for those who
crave still more Ninja awesomeness, we've unmasked the Invoice Ninja Pro plan, which crave still more Ninja awesomeness, we've unmasked the Invoice Ninja Pro plan, which
offers more versatility, power and customization options for just $50 per year. </p> offers more versatility, power and customization options for just $50 per year. </p>
</div>
</div>
</div>
@include('plans')
</div>
</section>
<section class="upper-footer white-bg">
<div class="container">
<div class="row">
<div class="col-md-3 center-block">
<a href="#">
<div class="cta">
<h2 onclick="return getStarted()">Invoice Now <span>+</span></h2>
</div>
</a>
</div> </div>
</div> </div>
</div> </div>
<div class="container">
<div class="row">
<div class="plans-table col-md-9">
<div class="col-md-4 desc hide-mobile">
<div class="cell"></div>
<div class="cell">Number of clients per account</div>
<div class="cell">Unlimited client invoices</div>
<div class="cell">Add your company logo</div>
<div class="cell">Live .PDF invoice creation </div>
<div class="cell">4 beatiful invoice templates</div>
<div class="cell">Accept credit card payments</div>
<div class="cell">Custom invoice fields</div>
<div class="cell">Priority email support</div>
<div class="cell">Custom invoice colors</div>
<div class="cell">Remove "Created by Invoice Ninja"</div>
<div class="cell">Pricing</div>
</div>
<div class="free col-md-4">
<div class="cell">Free</div>
<div class="cell"><div class="hide-desktop">Number of clients per account</div><span>500</span></div>
<div class="cell"><div class="hide-desktop">Unlimited client invoices</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Add your company logo</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Live .PDF invoice creation</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">4 beatiful invoice templates</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Accept credit card payments</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Custom invoice fields</div><span class="glyphicon glyphicon-remove"></div>
<div class="cell"><div class="hide-desktop">Priority email support</div><span class="glyphicon glyphicon-remove"></div>
<div class="cell"><div class="hide-desktop">Custom invoice colors</div><span class="glyphicon glyphicon-remove"></div>
<div class="cell"><div class="hide-desktop">Remove "Created by Invoice Ninja"</div><span class="glyphicon glyphicon-remove"></div>
<div class="cell price"><div class="hide-desktop">Pricing</div><p>Free<span> /Always!</span></p></div>
</div>
<div class="pro col-md-4">
<div class="cell">Pro Plan<span class="glyphicon glyphicon-star"></div>
<div class="cell"><div class="hide-desktop">Number of clients per account</div><span style="color: #2299c0; font-size: 16px;">5,000</span></div>
<div class="cell"><div class="hide-desktop">Unlimited client invoices</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Add your company logo</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Live .PDF invoice creation</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">4 beatiful invoice templates</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Accept credit card payments</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Custom invoice fields</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Priority email support</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Custom invoice colors</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell"><div class="hide-desktop">Remove "Created by Invoice Ninja"</div><span class="glyphicon glyphicon-ok"></div>
<div class="cell price"><div class="hide-desktop">Pricing</div><p>$50<span> /Year</span></p></div>
<!--
<div class="cell">
<a href="#">
<div class="cta">
<h2 onclick="return getStarted()">GO PRO <span>+</span></h2>
</div>
-->
</a>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="upper-footer white-bg">
<div class="container">
<div class="row">
<div class="col-md-3 center-block">
<a href="#">
<div class="cta">
<h2 onclick="return getStarted()">Invoice Now <span>+</span></h2>
</div>
</a>
</div>
</div>
</div>
</section> </section>

View File

@ -95,7 +95,7 @@
</div> </div>
</div> </div>
<!-- <p>or {{ link_to('features', 'View Our Features' ) }}</a></p> --> <!-- <p>or {{ link_to('features', 'View Our Features' ) }}</a></p> -->
<p><i>No signup needed</i></p> <p>No signup needed</p>
</div> </div>
<div class="col-md-7"> <div class="col-md-7">
<img src="{{ asset('images/devices.png') }}"> <img src="{{ asset('images/devices.png') }}">

View File

@ -1,4 +1,4 @@
@extends('header') @extends('accounts.nav')
@section('head') @section('head')
@parent @parent
@ -7,20 +7,30 @@
@stop @stop
@section('content') @section('content')
@parent
<p>&nbsp;</p> @include('accounts.nav_advanced')
<div class="row"> <div class="row">
<div class="col-lg-3"> <div class="col-lg-4">
{{ Former::open() }} {{ Former::open()->addClass('warn-on-exit') }}
{{ Former::populateField('start_date', $startDate) }} {{ Former::populateField('start_date', $startDate) }}
{{ Former::populateField('end_date', $endDate) }} {{ Former::populateField('end_date', $endDate) }}
{{ Former::select('chart_type')->options($chartTypes, $chartType) }} {{ Former::select('chart_type')->options($chartTypes, $chartType) }}
{{ Former::select('group_by')->options($dateTypes, $groupBy) }} {{ Former::select('group_by')->options($dateTypes, $groupBy) }}
{{ Former::text('start_date') }} {{ Former::text('start_date') }}
{{ Former::text('end_date') }} {{ Former::text('end_date') }}
{{ Former::actions( Button::primary_submit('Generate') ) }}
@if (Auth::user()->isPro())
{{ Former::actions( Button::primary_submit('Generate') ) }}
@else
<script>
$(function() {
$('form.warn-on-exit').find('input, select').prop('disabled', true);
});
</script>
@endif
{{ Former::close() }} {{ Former::close() }}
<p>&nbsp;</p> <p>&nbsp;</p>
@ -38,8 +48,8 @@
</div> </div>
</div> </div>
<div class="col-lg-9"> <div class="col-lg-8">
<canvas id="monthly-reports" width="850" height="400"></canvas> <canvas id="monthly-reports" width="772" height="400"></canvas>
</div> </div>
</div> </div>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 216 KiB

View File

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -1727,3 +1727,13 @@ function setDocHexDraw(doc, hex) {
var b = hexToB(hex); var b = hexToB(hex);
return doc.setDrawColor(r, g, b); return doc.setDrawColor(r, g, b);
} }
function openUrl(url) {
trackUrl(url);
window.open(url, '_blank');
}
function trackUrl(url) {
url = '/track' + url.replace('http:/', '');
ga('send', 'pageview', url);
}