mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Merge branch 'master' of github.com:hillelcoren/invoice-ninja
This commit is contained in:
commit
83cd9aaf64
@ -4,11 +4,9 @@
|
||||
### [https://www.invoiceninja.com](https://www.invoiceninja.com)
|
||||
### 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/).
|
||||
|
||||
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).
|
||||
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).
|
||||
|
||||
If you'd like to translate the site please use [caouecs/Laravel4-long](https://github.com/caouecs/Laravel4-lang) for the starter files.
|
||||
|
||||
|
@ -78,7 +78,7 @@ class AccountController extends \BaseController {
|
||||
return Response::json($data);
|
||||
}
|
||||
|
||||
public function showSection($section = ACCOUNT_DETAILS)
|
||||
public function showSection($section = ACCOUNT_DETAILS, $subSection = false)
|
||||
{
|
||||
if ($section == ACCOUNT_DETAILS)
|
||||
{
|
||||
@ -184,10 +184,11 @@ class AccountController extends \BaseController {
|
||||
else if ($section == ACCOUNT_ADVANCED_SETTINGS)
|
||||
{
|
||||
$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)
|
||||
{
|
||||
@ -227,7 +228,14 @@ class AccountController extends \BaseController {
|
||||
}
|
||||
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)
|
||||
{
|
||||
@ -247,23 +255,37 @@ class AccountController extends \BaseController {
|
||||
return Redirect::to('company/products');
|
||||
}
|
||||
|
||||
private function saveAdvancedSettings()
|
||||
private function saveCustomFields()
|
||||
{
|
||||
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->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'));
|
||||
}
|
||||
|
||||
return Redirect::to('company/advanced_settings');
|
||||
}
|
||||
|
||||
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'));
|
||||
}
|
||||
|
||||
return Redirect::to('company/advanced_settings');
|
||||
}
|
||||
|
||||
|
@ -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>'; })
|
||||
->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); })
|
||||
->addColumn('payment_date', function($model) { return Utils::dateToString($model->payment_date); })
|
||||
|
@ -24,7 +24,10 @@ class ReportController extends \BaseController {
|
||||
$datasets = [];
|
||||
$labels = [];
|
||||
$maxTotals = 0;
|
||||
$width = 10;
|
||||
|
||||
if (Auth::user()->account->isPro())
|
||||
{
|
||||
foreach ([ENTITY_INVOICE, ENTITY_PAYMENT, ENTITY_CREDIT] as $entityType)
|
||||
{
|
||||
$records = DB::table($entityType.'s')
|
||||
@ -71,6 +74,7 @@ class ReportController extends \BaseController {
|
||||
|
||||
$width = (ceil( $maxTotals / 100 ) * 100) / 10;
|
||||
$width = max($width, 10);
|
||||
}
|
||||
|
||||
$dateTypes = [
|
||||
'DAYOFYEAR' => 'Daily',
|
||||
@ -92,7 +96,8 @@ class ReportController extends \BaseController {
|
||||
'chartType' => $chartType,
|
||||
'startDate' => $startDate->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);
|
||||
|
@ -46,6 +46,7 @@ class ConstantsSeeder extends Seeder
|
||||
PaymentType::create(array('name' => 'Credit Card Other'));
|
||||
PaymentType::create(array('name' => 'PayPal'));
|
||||
PaymentType::create(array('name' => 'Google Wallet'));
|
||||
PaymentType::create(array('name' => 'Check'));
|
||||
|
||||
Theme::create(array('name' => 'amelia'));
|
||||
Theme::create(array('name' => 'cerulean'));
|
||||
|
@ -348,5 +348,7 @@ return array(
|
||||
'specify_colors' => 'Specify colors',
|
||||
'specify_colors_label' => 'Select the colors used in the invoice',
|
||||
|
||||
'chart_builder' => 'Chart Builder',
|
||||
|
||||
);
|
||||
|
||||
|
@ -219,7 +219,7 @@ class Utils
|
||||
return $date->format($format);
|
||||
}
|
||||
|
||||
public static function toSqlDate($date)
|
||||
public static function toSqlDate($date, $formatResult = true)
|
||||
{
|
||||
if (!$date)
|
||||
{
|
||||
@ -229,10 +229,12 @@ class Utils
|
||||
$timezone = Session::get(SESSION_TIMEZONE);
|
||||
$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')
|
||||
{
|
||||
@ -242,7 +244,8 @@ class Utils
|
||||
$timezone = Session::get(SESSION_TIMEZONE);
|
||||
$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)
|
||||
|
@ -198,6 +198,7 @@ class AccountRepository
|
||||
$client = new Client;
|
||||
$client->public_id = Auth::user()->account_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)
|
||||
{
|
||||
$client->$field = Auth::user()->account->$field;
|
||||
|
@ -99,6 +99,7 @@ class PaymentRepository
|
||||
$payment->payment_type_id = $paymentTypeId;
|
||||
$payment->payment_date = Utils::toSqlDate($input['payment_date']);
|
||||
$payment->amount = $amount;
|
||||
$payment->transaction_reference = trim($input['transaction_reference']);
|
||||
$payment->save();
|
||||
|
||||
return $payment;
|
||||
|
@ -11,8 +11,6 @@
|
||||
|
|
||||
*/
|
||||
|
||||
|
||||
|
||||
//apc_clear_cache();
|
||||
//Cache::flush();
|
||||
|
||||
@ -74,9 +72,12 @@ Route::group(array('before' => 'auth'), function()
|
||||
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('company/{section?}', 'AccountController@showSection');
|
||||
Route::post('company/{section?}', 'AccountController@doSection');
|
||||
Route::get('company/{section?}/{sub_section?}', 'AccountController@showSection');
|
||||
Route::post('company/{section?}/{sub_section?}', 'AccountController@doSection');
|
||||
Route::post('user/setTheme', 'UserController@setTheme');
|
||||
Route::post('remove_logo', 'AccountController@removeLogo');
|
||||
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('api/credits/{client_id?}', array('as'=>'api.credits', 'uses'=>'CreditController@getDatatable'));
|
||||
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_NAME', 'Invoice Ninja');
|
||||
define('SITE_URL', 'https://www.invoiceninja.com');
|
||||
|
||||
|
||||
define('ENV_DEVELOPMENT', 'local');
|
||||
define('ENV_STAGING', 'staging');
|
||||
define('ENV_PRODUCTION', 'fortrabbit');
|
||||
@ -137,8 +136,12 @@ define('ACCOUNT_IMPORT_EXPORT', 'import_export');
|
||||
define('ACCOUNT_PAYMENTS', 'payments');
|
||||
define('ACCOUNT_MAP', 'import_map');
|
||||
define('ACCOUNT_EXPORT', 'export');
|
||||
define('ACCOUNT_ADVANCED_SETTINGS', 'advanced_settings');
|
||||
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('RECENTLY_VIEWED_LIMIT', 8);
|
||||
@ -191,7 +194,6 @@ define('GATEWAY_PAYPAL_EXPRESS', 17);
|
||||
define('GATEWAY_BEANSTREAM', 29);
|
||||
define('GATEWAY_PSIGATE', 30);
|
||||
|
||||
define('PRO_PLAN_PRICE', 50);
|
||||
define('REQUESTED_PRO_PLAN', 'REQUESTED_PRO_PLAN');
|
||||
define('NINJA_ACCOUNT_KEY', 'zg4ylmzDkdkPOT8yoKQw9LTWaoZJx79h');
|
||||
define('NINJA_GATEWAY_ID', GATEWAY_AUTHORIZE_NET);
|
||||
@ -225,7 +227,7 @@ HTML::macro('menu_link', function($type) {
|
||||
$types = $type.'s';
|
||||
$Type = ucfirst($type);
|
||||
$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.'">
|
||||
<a href="'.URL::to($types).'" class="dropdown-toggle">'.trans("texts.$types").'</a>
|
||||
|
@ -2,16 +2,7 @@
|
||||
|
||||
@section('content')
|
||||
@parent
|
||||
|
||||
@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>
|
||||
<p/>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@include('accounts.nav_advanced')
|
||||
|
||||
{{ Former::open()->addClass('col-md-8 col-md-offset-2 warn-on-exit') }}
|
||||
{{ Former::populate($account) }}
|
||||
@ -27,10 +18,6 @@
|
||||
{{ Former::text('custom_client_label1')->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())
|
||||
{{ Former::actions( Button::lg_success_submit(trans('texts.save'))->append_with_icon('floppy-disk') ) }}
|
||||
@else
|
||||
@ -43,20 +30,4 @@
|
||||
|
||||
{{ 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
|
42
app/views/accounts/invoice_design.blade.php
Normal file
42
app/views/accounts/invoice_design.blade.php
Normal 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
|
@ -8,8 +8,9 @@
|
||||
{{ HTML::nav_link('company/products', 'product_library') }}
|
||||
{{ HTML::nav_link('company/notifications', 'notifications') }}
|
||||
{{ 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>
|
||||
<p> </p>
|
||||
|
||||
<br/>
|
||||
|
||||
@stop
|
17
app/views/accounts/nav_advanced.blade.php
Normal file
17
app/views/accounts/nav_advanced.blade.php
Normal 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> </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>
|
||||
<p/>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<br/>
|
@ -95,7 +95,7 @@
|
||||
var contents = $(this).parent().contents();
|
||||
contents[contents.length - 1].nodeValue = '';
|
||||
$(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>');
|
||||
});
|
||||
|
||||
|
||||
|
@ -113,7 +113,6 @@
|
||||
{{ HTML::menu_link('invoice') }}
|
||||
{{ HTML::menu_link('payment') }}
|
||||
{{ HTML::menu_link('credit') }}
|
||||
{{-- HTML::nav_link('reports', 'Reports') --}}
|
||||
</ul>
|
||||
|
||||
<div class="navbar-form navbar-right">
|
||||
@ -152,7 +151,7 @@
|
||||
<li>{{ link_to('company/products', uctrans('texts.product_library')) }}</li>
|
||||
<li>{{ link_to('company/notifications', uctrans('texts.notifications')) }}</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>{{ link_to('#', trans('texts.logout'), array('onclick'=>'logout()')) }}</li>
|
||||
@ -376,60 +375,8 @@ Want something changed? We're {{ link_to('https://github.com/hillelcoren/invoice
|
||||
</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>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
@include('plans')
|
||||
|
||||
</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()) +
|
||||
'&go_pro=' + $('#go_pro').val(),
|
||||
success: function(result) {
|
||||
trackUrl('/signed_up');
|
||||
if (result) {
|
||||
localStorage.setItem('guest_key', '');
|
||||
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())
|
||||
function showProPlan() {
|
||||
var proPlanFeature = false;
|
||||
function showProPlan(feature) {
|
||||
proPlanFeature = feature;
|
||||
$('#proPlanModal').modal('show');
|
||||
trackUrl('/view_pro_plan/' + feature);
|
||||
}
|
||||
|
||||
function submitProPlan() {
|
||||
|
||||
trackUrl('/submit_pro_plan/' + proPlanFeature);
|
||||
if (NINJA.isRegistered) {
|
||||
$('#proPlanDiv, #proPlanFooter').hide();
|
||||
$('#proPlanWorking').show();
|
||||
|
@ -276,7 +276,7 @@
|
||||
|
||||
@if (!Auth::user()->account->isPro())
|
||||
<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>
|
||||
@endif
|
||||
|
||||
@ -449,10 +449,6 @@
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
function showSignUp() {
|
||||
$('#signUpModal').modal('show');
|
||||
}
|
||||
|
||||
function showLearnMore() {
|
||||
$('#recurringModal').modal('show');
|
||||
}
|
||||
|
@ -1,23 +1,22 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
|
||||
<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 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:url" content="https://www.invoiceninja.com"></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: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>
|
||||
|
||||
@ -52,7 +51,7 @@
|
||||
|
||||
<body>
|
||||
|
||||
@if (App::environment() == ENV_PRODUCTION && isset($_ENV['ANALYTICS_KEY']) && $_ENV['ANALYTICS_KEY'])
|
||||
@if (isset($_ENV['ANALYTICS_KEY']) && $_ENV['ANALYTICS_KEY'])
|
||||
<script>
|
||||
(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),
|
||||
|
@ -23,6 +23,7 @@
|
||||
{{ Former::select('payment_type_id')->addOption('','')
|
||||
->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('transaction_reference') }}
|
||||
{{-- Former::select('currency_id')->addOption('','')
|
||||
->fromQuery($currencies, 'name', 'id')->select(Session::get(SESSION_CURRENCY, DEFAULT_CURRENCY)) --}}
|
||||
|
||||
|
54
app/views/plans.blade.php
Normal file
54
app/views/plans.blade.php
Normal 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>
|
@ -105,7 +105,6 @@ var contactForm = {
|
||||
<div class="col-md-4 col-md-offset-1 address">
|
||||
<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-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="github"></span><div style="padding-top:10px"> <a href="https://github.com/hillelcoren/invoice-ninja" target="_blank">GitHub Project</a></div></p>
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
background-image: url({{ asset('/images/hero-bg-1.jpg') }});
|
||||
}
|
||||
.hero-about {
|
||||
background-image: url({{ asset('/images/hero-bg-3.jpg.jpg') }});
|
||||
background-image: url({{ asset('/images/hero-bg-4.jpg') }});
|
||||
}
|
||||
.hero-plans {
|
||||
background-image: url({{ asset('/images/hero-bg-plans.jpg') }});
|
||||
@ -98,6 +98,7 @@
|
||||
<li>{{ link_to('about', 'About Us' ) }}</li>
|
||||
<li>{{ link_to('plans', 'Plans' ) }}</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>
|
||||
</ul>
|
||||
</div>
|
||||
@ -157,6 +158,7 @@
|
||||
<li>{{ link_to('about', 'About Us' ) }}</li>
|
||||
<li>{{ link_to('plans', 'Plans' ) }}</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>
|
||||
</ul>
|
||||
|
||||
|
@ -22,65 +22,9 @@
|
||||
</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>
|
||||
<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>
|
||||
|
||||
|
@ -95,7 +95,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<!-- <p>or {{ link_to('features', 'View Our Features' ) }}</a></p> -->
|
||||
<p><i>No signup needed</i></p>
|
||||
<p>No signup needed</p>
|
||||
</div>
|
||||
<div class="col-md-7">
|
||||
<img src="{{ asset('images/devices.png') }}">
|
||||
|
@ -1,4 +1,4 @@
|
||||
@extends('header')
|
||||
@extends('accounts.nav')
|
||||
|
||||
@section('head')
|
||||
@parent
|
||||
@ -7,20 +7,30 @@
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
|
||||
<p> </p>
|
||||
@parent
|
||||
@include('accounts.nav_advanced')
|
||||
|
||||
<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('end_date', $endDate) }}
|
||||
{{ Former::select('chart_type')->options($chartTypes, $chartType) }}
|
||||
{{ Former::select('group_by')->options($dateTypes, $groupBy) }}
|
||||
{{ Former::text('start_date') }}
|
||||
{{ Former::text('end_date') }}
|
||||
|
||||
@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() }}
|
||||
|
||||
<p> </p>
|
||||
@ -38,8 +48,8 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col-lg-9">
|
||||
<canvas id="monthly-reports" width="850" height="400"></canvas>
|
||||
<div class="col-lg-8">
|
||||
<canvas id="monthly-reports" width="772" height="400"></canvas>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
1621
public/built.css
1621
public/built.css
File diff suppressed because one or more lines are too long
30344
public/built.js
30344
public/built.js
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 |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
@ -1727,3 +1727,13 @@ function setDocHexDraw(doc, hex) {
|
||||
var b = hexToB(hex);
|
||||
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);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user