diff --git a/README.md b/README.md index f13aadef225f..8fa29830ea6a 100644 --- a/README.md +++ b/README.md @@ -71,4 +71,5 @@ Configure config/database.php and then initialize the database * [nnnick/Chart.js](https://github.com/nnnick/Chart.js) - Simple HTML5 Charts using the tag * [josscrowcroft/accounting.js](https://github.com/josscrowcroft/accounting.js) - A lightweight JavaScript library for number, money and currency formatting * [jashkenas/underscore](https://github.com/jashkenas/underscore) - JavaScript's utility _ belt -* [caouecs/Laravel4-long](https://github.com/caouecs/Laravel4-lang) - List of languages ​​for Laravel4 \ No newline at end of file +* [caouecs/Laravel4-long](https://github.com/caouecs/Laravel4-lang) - List of languages ​​for Laravel4 +* [calvinfroedge/PHP-Payments](https://github.com/calvinfroedge/PHP-Payments) - A uniform payments interface for PHP \ No newline at end of file diff --git a/app/controllers/AccountController.php b/app/controllers/AccountController.php index 18a47e2b8252..3f8706f19dbb 100755 --- a/app/controllers/AccountController.php +++ b/app/controllers/AccountController.php @@ -55,124 +55,16 @@ class AccountController extends \BaseController { public function enableProPlan() { - if (Auth::user()->isPro()) + $invoice = $this->accountRepo->enableProPlan(); + + if ($invoice) { - return Redirect::to('/dashboard'); + $this->contactMailer->sendInvoice($invoice); } - $account = Auth::user()->account; - - $ninjaAccount = $this->getNinjaAccount(); - $ninjaClient = $this->getNinjaClient($ninjaAccount); - $invoice = $this->createNinjaInvoice($ninjaAccount, $ninjaClient); - - $this->contactMailer->sendInvoice($invoice); - return RESULT_SUCCESS; } - private function createNinjaInvoice($account, $client) - { - $lastInvoice = Invoice::withTrashed()->whereAccountId($account->id)->orderBy('public_id', 'DESC')->first(); - $publicId = $lastInvoice ? ($lastInvoice->public_id + 1) : 1; - - $invoice = new Invoice(); - $invoice->account_id = $account->id; - $invoice->user_id = $account->users()->first()->id; - $invoice->public_id = $publicId; - $invoice->client_id = $client->id; - $invoice->invoice_number = $account->getNextInvoiceNumber(); - $invoice->invoice_date = date_create()->format('Y-m-d'); - $invoice->amount = PRO_PLAN_PRICE; - $invoice->balance = PRO_PLAN_PRICE; - $invoice->save(); - - $item = new InvoiceItem(); - $item->account_id = $account->id; - $item->user_id = $account->users()->first()->id; - $item->public_id = $publicId; - $item->qty = 1; - $item->cost = PRO_PLAN_PRICE; - $item->notes = trans('texts.pro_plan_description'); - $item->product_key = trans('texts.pro_plan_product'); - $invoice->invoice_items()->save($item); - - $invitation = new Invitation(); - $invitation->account_id = $account->id; - $invitation->user_id = $account->users()->first()->id; - $invitation->public_id = $publicId; - $invitation->invoice_id = $invoice->id; - $invitation->contact_id = $client->contacts()->first()->id; - $invitation->invitation_key = str_random(RANDOM_KEY_LENGTH); - $invitation->save(); - - return $invoice; - } - - private function getNinjaAccount() - { - $account = Account::whereAccountKey(NINJA_ACCOUNT_KEY)->first(); - - if ($account) - { - return $account; - } - else - { - $account = new Account(); - $account->name = 'Invoice Ninja'; - $account->work_email = 'contact@invoiceninja.com'; - $account->work_phone = '(800) 763-1948'; - $account->account_key = NINJA_ACCOUNT_KEY; - $account->save(); - - $random = str_random(RANDOM_KEY_LENGTH); - - $user = new User(); - $user->registered = true; - $user->confirmed = true; - $user->email = 'contact@invoiceninja.com'; - $user->password = $random; - $user->password_confirmation = $random; - $user->username = $random; - $user->first_name = 'Invoice'; - $user->last_name = 'Ninja'; - $user->notify_sent = false; - $user->notify_paid = false; - $account->users()->save($user); - } - - return $account; - } - - private function getNinjaClient($ninjaAccount) - { - $client = Client::whereAccountId($ninjaAccount->id)->wherePublicId(Auth::user()->account_id)->first(); - - if (!$client) - { - $client = new Client; - $client->public_id = Auth::user()->account_id; - $client->user_id = $ninjaAccount->users()->first()->id; - foreach (['name', 'address1', 'address2', 'city', 'state', 'postal_code', 'country_id', 'work_phone'] as $field) - { - $client->$field = Auth::user()->account->$field; - } - $ninjaAccount->clients()->save($client); - - $contact = new Contact; - $contact->user_id = $ninjaAccount->users()->first()->id; - $contact->is_primary = true; - foreach (['first_name', 'last_name', 'email', 'phone'] as $field) - { - $contact->$field = Auth::user()->$field; - } - $client->contacts()->save($contact); - } - - return $client; - } - public function setTrashVisible($entityType, $visible) { Session::put('show_trash', $visible == 'true'); @@ -770,6 +662,11 @@ class AccountController extends \BaseController { $activity->save(); } + if (Input::get('go_pro') == 'true') + { + Session::set(REQUESTED_PRO_PLAN, true); + } + return "{$user->first_name} {$user->last_name}"; } } \ No newline at end of file diff --git a/app/controllers/UserController.php b/app/controllers/UserController.php index 987e57c28d59..3045bc846eac 100755 --- a/app/controllers/UserController.php +++ b/app/controllers/UserController.php @@ -9,8 +9,22 @@ | */ +use ninja\repositories\AccountRepository; +use ninja\mailers\ContactMailer; + class UserController extends BaseController { + protected $accountRepo; + protected $contactMailer; + + public function __construct(AccountRepository $accountRepo, ContactMailer $contactMailer) + { + parent::__construct(); + + $this->accountRepo = $accountRepo; + $this->contactMailer = $contactMailer; + } + public function setTheme() { $user = User::find(Auth::user()->id); @@ -171,6 +185,18 @@ class UserController extends BaseController { if ( Confide::confirm( $code ) ) { $notice_msg = trans('texts.confide.confirmation'); + + if (Session::has(REQUESTED_PRO_PLAN)) + { + Session::forget(REQUESTED_PRO_PLAN); + + if ($invoice = $this->accountRepo->enableProPlan()) + { + $this->contactMailer->sendInvoice($invoice); + $notice_msg = trans('texts.pro_plan_succes'); + } + } + return Redirect::action('UserController@login')->with( 'message', $notice_msg ); } else diff --git a/app/libraries/utils.php b/app/libraries/utils.php index 1ea423a8db84..88c3cccf9566 100755 --- a/app/libraries/utils.php +++ b/app/libraries/utils.php @@ -2,6 +2,11 @@ class Utils { + public static function isRegistered() + { + return Auth::check() && Auth::user()->registered; + } + public static function isProd() { return App::environment() == ENV_PRODUCTION; diff --git a/app/ninja/repositories/AccountRepository.php b/app/ninja/repositories/AccountRepository.php index 069814e83a5c..75e5ad64deb4 100755 --- a/app/ninja/repositories/AccountRepository.php +++ b/app/ninja/repositories/AccountRepository.php @@ -7,6 +7,10 @@ use Request; use Session; use Language; use User; +use Auth; +use Invitation; +use Invoice; +use InvoiceItem; class AccountRepository { @@ -90,4 +94,124 @@ class AccountRepository return $data; } + + + public function enableProPlan() + { + if (Auth::user()->isPro()) + { + return false; + } + + $account = Auth::user()->account; + + $ninjaAccount = $this->getNinjaAccount(); + $ninjaClient = $this->getNinjaClient($ninjaAccount); + $invoice = $this->createNinjaInvoice($ninjaAccount, $ninjaClient); + + return $invoice; + } + + private function createNinjaInvoice($account, $client) + { + $lastInvoice = Invoice::withTrashed()->whereAccountId($account->id)->orderBy('public_id', 'DESC')->first(); + $publicId = $lastInvoice ? ($lastInvoice->public_id + 1) : 1; + + $invoice = new Invoice(); + $invoice->account_id = $account->id; + $invoice->user_id = $account->users()->first()->id; + $invoice->public_id = $publicId; + $invoice->client_id = $client->id; + $invoice->invoice_number = $account->getNextInvoiceNumber(); + $invoice->invoice_date = date_create()->format('Y-m-d'); + $invoice->amount = PRO_PLAN_PRICE; + $invoice->balance = PRO_PLAN_PRICE; + $invoice->save(); + + $item = new InvoiceItem(); + $item->account_id = $account->id; + $item->user_id = $account->users()->first()->id; + $item->public_id = $publicId; + $item->qty = 1; + $item->cost = PRO_PLAN_PRICE; + $item->notes = trans('texts.pro_plan_description'); + $item->product_key = trans('texts.pro_plan_product'); + $invoice->invoice_items()->save($item); + + $invitation = new Invitation(); + $invitation->account_id = $account->id; + $invitation->user_id = $account->users()->first()->id; + $invitation->public_id = $publicId; + $invitation->invoice_id = $invoice->id; + $invitation->contact_id = $client->contacts()->first()->id; + $invitation->invitation_key = str_random(RANDOM_KEY_LENGTH); + $invitation->save(); + + return $invoice; + } + + private function getNinjaAccount() + { + $account = Account::whereAccountKey(NINJA_ACCOUNT_KEY)->first(); + + if ($account) + { + return $account; + } + else + { + $account = new Account(); + $account->name = 'Invoice Ninja'; + $account->work_email = 'contact@invoiceninja.com'; + $account->work_phone = '(800) 763-1948'; + $account->account_key = NINJA_ACCOUNT_KEY; + $account->save(); + + $random = str_random(RANDOM_KEY_LENGTH); + + $user = new User(); + $user->registered = true; + $user->confirmed = true; + $user->email = 'contact@invoiceninja.com'; + $user->password = $random; + $user->password_confirmation = $random; + $user->username = $random; + $user->first_name = 'Invoice'; + $user->last_name = 'Ninja'; + $user->notify_sent = false; + $user->notify_paid = false; + $account->users()->save($user); + } + + return $account; + } + + private function getNinjaClient($ninjaAccount) + { + $client = Client::whereAccountId($ninjaAccount->id)->wherePublicId(Auth::user()->account_id)->first(); + + if (!$client) + { + $client = new Client; + $client->public_id = Auth::user()->account_id; + $client->user_id = $ninjaAccount->users()->first()->id; + foreach (['name', 'address1', 'address2', 'city', 'state', 'postal_code', 'country_id', 'work_phone'] as $field) + { + $client->$field = Auth::user()->account->$field; + } + $ninjaAccount->clients()->save($client); + + $contact = new Contact; + $contact->user_id = $ninjaAccount->users()->first()->id; + $contact->is_primary = true; + foreach (['first_name', 'last_name', 'email', 'phone'] as $field) + { + $contact->$field = Auth::user()->$field; + } + $client->contacts()->save($contact); + } + + return $client; + } + } \ No newline at end of file diff --git a/app/routes.php b/app/routes.php index 34fa06bdcbb9..0b0741333ab6 100755 --- a/app/routes.php +++ b/app/routes.php @@ -11,6 +11,8 @@ | */ + + //apc_clear_cache(); //Cache::flush(); @@ -237,7 +239,7 @@ define('RESULT_FAILURE', 'failure'); define('GATEWAY_PAYPAL_EXPRESS', 17); define('NINJA_ACCOUNT_KEY', 'zg4ylmzDkdkPOT8yoKQw9LTWaoZJx79h'); define('PRO_PLAN_PRICE', 40); - +define('REQUESTED_PRO_PLAN', 'REQUESTED_PRO_PLAN'); define('PAYMENT_LIBRARY_OMNIPAY', 1); define('PAYMENT_LIBRARY_PHP_PAYMENTS', 2); @@ -304,3 +306,5 @@ if (Auth::check() && Auth::user()->id === 1) Auth::loginUsingId(1); } */ + +//dd(Session::has(REQUESTED_PRO_PLAN)); \ No newline at end of file diff --git a/app/views/header.blade.php b/app/views/header.blade.php index 8131abcbb4e4..955c1153c0da 100755 --- a/app/views/header.blade.php +++ b/app/views/header.blade.php @@ -256,7 +256,11 @@ Want something changed? We're {{ link_to('https://github.com/hillelcoren/invoice {{ Former::populateField('new_email', Auth::user()->email); }} @endif - {{ Former::hidden('path')->value(Request::path()) }} +
+ {{ Former::text('path')->value(Request::path()) }} + {{ Former::text('go_pro') }} +
+ {{ Former::text('new_first_name')->label(trans('texts.first_name')) }} {{ Former::text('new_last_name')->label(trans('texts.last_name')) }} {{ Former::text('new_email')->label(trans('texts.email')) }} @@ -396,7 +400,8 @@ Want something changed? We're {{ link_to('https://github.com/hillelcoren/invoice data: 'new_email=' + encodeURIComponent($('form.signUpForm #new_email').val()) + '&new_password=' + encodeURIComponent($('form.signUpForm #new_password').val()) + '&new_first_name=' + encodeURIComponent($('form.signUpForm #new_first_name').val()) + - '&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(), success: function(result) { if (result) { localStorage.setItem('guest_key', ''); diff --git a/app/views/invoices/edit.blade.php b/app/views/invoices/edit.blade.php index 3ab26a420710..5e821377c2ec 100755 --- a/app/views/invoices/edit.blade.php +++ b/app/views/invoices/edit.blade.php @@ -438,7 +438,7 @@