diff --git a/app/commands/SendRecurringInvoices.php b/app/commands/SendRecurringInvoices.php index 2b08e45b70d9..dda7bdc85e62 100755 --- a/app/commands/SendRecurringInvoices.php +++ b/app/commands/SendRecurringInvoices.php @@ -5,116 +5,108 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputArgument; use ninja\mailers\ContactMailer as Mailer; -class SendRecurringInvoices extends Command { +class SendRecurringInvoices extends Command +{ + protected $name = 'ninja:send-invoices'; + protected $description = 'Send recurring invoices'; + protected $mailer; - protected $name = 'ninja:send-invoices'; - protected $description = 'Send recurring invoices'; - protected $mailer; + public function __construct(Mailer $mailer) + { + parent::__construct(); - public function __construct(Mailer $mailer) - { - parent::__construct(); + $this->mailer = $mailer; + } - $this->mailer = $mailer; - } + public function fire() + { + $this->info(date('Y-m-d').' Running SendRecurringInvoices...'); + $today = new DateTime(); - public function fire() - { - $this->info(date('Y-m-d') . ' Running SendRecurringInvoices...'); - $today = new DateTime(); - - $invoices = Invoice::with('account.timezone', 'invoice_items', 'client', 'user') - ->whereRaw('is_deleted IS FALSE AND deleted_at IS NULL AND is_recurring IS TRUE AND start_date <= ? AND (end_date IS NULL OR end_date >= ?)', array($today, $today))->get(); - $this->info(count($invoices) . ' recurring invoice(s) found'); + $invoices = Invoice::with('account.timezone', 'invoice_items', 'client', 'user') + ->whereRaw('is_deleted IS FALSE AND deleted_at IS NULL AND is_recurring IS TRUE AND start_date <= ? AND (end_date IS NULL OR end_date >= ?)', array($today, $today))->get(); + $this->info(count($invoices).' recurring invoice(s) found'); - foreach ($invoices as $recurInvoice) - { - if ($recurInvoice->client->deleted_at) - { - continue; - } - - if (!$recurInvoice->user->confirmed) - { + foreach ($invoices as $recurInvoice) { + if ($recurInvoice->client->deleted_at) { continue; } - $this->info('Processing Invoice ' . $recurInvoice->id . ' - Should send ' . ($recurInvoice->shouldSendToday() ? 'YES' : 'NO')); - - if (!$recurInvoice->shouldSendToday()) - { - continue; - } - - $invoice = Invoice::createNew($recurInvoice); - $invoice->client_id = $recurInvoice->client_id; - $invoice->recurring_invoice_id = $recurInvoice->id; - $invoice->invoice_number = 'R' . $recurInvoice->account->getNextInvoiceNumber(); - $invoice->amount = $recurInvoice->amount; - $invoice->balance = $recurInvoice->amount; - $invoice->invoice_date = date_create()->format('Y-m-d'); - $invoice->discount = $recurInvoice->discount; - $invoice->po_number = $recurInvoice->po_number; - $invoice->public_notes = $recurInvoice->public_notes; - $invoice->terms = $recurInvoice->terms; - $invoice->tax_name = $recurInvoice->tax_name; - $invoice->tax_rate = $recurInvoice->tax_rate; - $invoice->invoice_design_id = $recurInvoice->invoice_design_id; - $invoice->custom_value1 = $recurInvoice->custom_value1; - $invoice->custom_value2 = $recurInvoice->custom_value2; - $invoice->custom_taxes1 = $recurInvoice->custom_taxes1; - $invoice->custom_taxes2 = $recurInvoice->custom_taxes2; - $invoice->is_amount_discount = $recurInvoice->is_amount_discount; + if (!$recurInvoice->user->confirmed) { + continue; + } - if ($invoice->client->payment_terms) - { - $invoice->due_date = date_create()->modify($invoice->client->payment_terms . ' day')->format('Y-m-d'); - } - - $invoice->save(); - - foreach ($recurInvoice->invoice_items as $recurItem) - { - $item = InvoiceItem::createNew($recurItem); - $item->product_id = $recurItem->product_id; - $item->qty = $recurItem->qty; - $item->cost = $recurItem->cost; - $item->notes = Utils::processVariables($recurItem->notes); - $item->product_key = Utils::processVariables($recurItem->product_key); - $item->tax_name = $recurItem->tax_name; - $item->tax_rate = $recurItem->tax_rate; - $invoice->invoice_items()->save($item); - } + $this->info('Processing Invoice '.$recurInvoice->id.' - Should send '.($recurInvoice->shouldSendToday() ? 'YES' : 'NO')); - foreach ($recurInvoice->invitations as $recurInvitation) - { - $invitation = Invitation::createNew($recurInvitation); - $invitation->contact_id = $recurInvitation->contact_id; - $invitation->invitation_key = str_random(RANDOM_KEY_LENGTH); - $invoice->invitations()->save($invitation); - } + if (!$recurInvoice->shouldSendToday()) { + continue; + } - $this->mailer->sendInvoice($invoice); + $invoice = Invoice::createNew($recurInvoice); + $invoice->client_id = $recurInvoice->client_id; + $invoice->recurring_invoice_id = $recurInvoice->id; + $invoice->invoice_number = 'R'.$recurInvoice->account->getNextInvoiceNumber(); + $invoice->amount = $recurInvoice->amount; + $invoice->balance = $recurInvoice->amount; + $invoice->invoice_date = date_create()->format('Y-m-d'); + $invoice->discount = $recurInvoice->discount; + $invoice->po_number = $recurInvoice->po_number; + $invoice->public_notes = $recurInvoice->public_notes; + $invoice->terms = $recurInvoice->terms; + $invoice->tax_name = $recurInvoice->tax_name; + $invoice->tax_rate = $recurInvoice->tax_rate; + $invoice->invoice_design_id = $recurInvoice->invoice_design_id; + $invoice->custom_value1 = $recurInvoice->custom_value1; + $invoice->custom_value2 = $recurInvoice->custom_value2; + $invoice->custom_taxes1 = $recurInvoice->custom_taxes1; + $invoice->custom_taxes2 = $recurInvoice->custom_taxes2; + $invoice->is_amount_discount = $recurInvoice->is_amount_discount; - $recurInvoice->last_sent_date = Carbon::now()->toDateTimeString(); - $recurInvoice->save(); - } + if ($invoice->client->payment_terms) { + $invoice->due_date = date_create()->modify($invoice->client->payment_terms.' day')->format('Y-m-d'); + } - $this->info('Done'); - } + $invoice->save(); - protected function getArguments() - { - return array( - //array('example', InputArgument::REQUIRED, 'An example argument.'), - ); - } + foreach ($recurInvoice->invoice_items as $recurItem) { + $item = InvoiceItem::createNew($recurItem); + $item->product_id = $recurItem->product_id; + $item->qty = $recurItem->qty; + $item->cost = $recurItem->cost; + $item->notes = Utils::processVariables($recurItem->notes); + $item->product_key = Utils::processVariables($recurItem->product_key); + $item->tax_name = $recurItem->tax_name; + $item->tax_rate = $recurItem->tax_rate; + $invoice->invoice_items()->save($item); + } - protected function getOptions() - { - return array( - //array('example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null), - ); - } + foreach ($recurInvoice->invitations as $recurInvitation) { + $invitation = Invitation::createNew($recurInvitation); + $invitation->contact_id = $recurInvitation->contact_id; + $invitation->invitation_key = str_random(RANDOM_KEY_LENGTH); + $invoice->invitations()->save($invitation); + } -} \ No newline at end of file + $this->mailer->sendInvoice($invoice); + + $recurInvoice->last_sent_date = Carbon::now()->toDateTimeString(); + $recurInvoice->save(); + } + + $this->info('Done'); + } + + protected function getArguments() + { + return array( + //array('example', InputArgument::REQUIRED, 'An example argument.'), + ); + } + + protected function getOptions() + { + return array( + //array('example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null), + ); + } +} diff --git a/app/controllers/InvoiceController.php b/app/controllers/InvoiceController.php index 6c5b589e6e5d..e41dfd98775f 100755 --- a/app/controllers/InvoiceController.php +++ b/app/controllers/InvoiceController.php @@ -46,7 +46,16 @@ class InvoiceController extends \BaseController public function clientIndex() { + $invitationKey = Session::get('invitation_key'); + if (!$invitationKey) { + return Redirect::to('/setup'); + } + + $invitation = Invitation::with('account')->where('invitation_key', '=', $invitationKey)->first(); + $color = $invitation->account->primary_color ? $invitation->account->primary_color : '#0b4d78'; + $data = [ + 'color' => $color, 'hideLogo' => Session::get('white_label'), 'title' => trans('texts.invoices'), 'entityType' => ENTITY_INVOICE, @@ -67,7 +76,7 @@ class InvoiceController extends \BaseController public function getClientDatatable() { //$accountId = Auth::user()->account_id; - $search = Input::get('sSearch'); + $search = Input::get('sSearch'); $invitationKey = Session::get('invitation_key'); $invitation = Invitation::where('invitation_key', '=', $invitationKey)->first(); diff --git a/app/controllers/PaymentController.php b/app/controllers/PaymentController.php index 5d2e6bc97a30..f94a93a3fcf6 100755 --- a/app/controllers/PaymentController.php +++ b/app/controllers/PaymentController.php @@ -30,12 +30,23 @@ class PaymentController extends \BaseController public function clientIndex() { - return View::make('public_list', array( + $invitationKey = Session::get('invitation_key'); + if (!$invitationKey) { + return Redirect::to('/setup'); + } + + $invitation = Invitation::with('account')->where('invitation_key', '=', $invitationKey)->first(); + $color = $invitation->account->primary_color ? $invitation->account->primary_color : '#0b4d78'; + + $data = [ + 'color' => $color, 'hideLogo' => Session::get('white_label'), 'entityType' => ENTITY_PAYMENT, 'title' => trans('texts.payments'), - 'columns' => Utils::trans(['invoice', 'transaction_reference', 'method', 'payment_amount', 'payment_date']), - )); + 'columns' => Utils::trans(['invoice', 'transaction_reference', 'method', 'payment_amount', 'payment_date']) + ]; + + return View::make('public_list', $data); } public function getDatatable($clientPublicId = null) diff --git a/app/controllers/QuoteController.php b/app/controllers/QuoteController.php index b060dec80a5f..199d6b1130a9 100644 --- a/app/controllers/QuoteController.php +++ b/app/controllers/QuoteController.php @@ -29,10 +29,10 @@ class QuoteController extends \BaseController } $data = [ - 'title' => trans('texts.quotes'), - 'entityType' => ENTITY_QUOTE, - 'columns' => Utils::trans(['checkbox', 'quote_number', 'client', 'quote_date', 'quote_total', 'due_date', 'status', 'action']), - ]; + 'title' => trans('texts.quotes'), + 'entityType' => ENTITY_QUOTE, + 'columns' => Utils::trans(['checkbox', 'quote_number', 'client', 'quote_date', 'quote_total', 'due_date', 'status', 'action']), + ]; /* if (Invoice::scope()->where('is_recurring', '=', true)->count() > 0) @@ -47,12 +47,21 @@ class QuoteController extends \BaseController public function clientIndex() { + $invitationKey = Session::get('invitation_key'); + if (!$invitationKey) { + return Redirect::to('/setup'); + } + + $invitation = Invitation::with('account')->where('invitation_key', '=', $invitationKey)->first(); + $color = $invitation->account->primary_color ? $invitation->account->primary_color : '#0b4d78'; + $data = [ - 'hideLogo' => Session::get('white_label'), - 'title' => trans('texts.quotes'), - 'entityType' => ENTITY_QUOTE, - 'columns' => Utils::trans(['quote_number', 'quote_date', 'quote_total', 'due_date']), - ]; + 'color' => $color, + 'hideLogo' => Session::get('white_label'), + 'title' => trans('texts.quotes'), + 'entityType' => ENTITY_QUOTE, + 'columns' => Utils::trans(['quote_number', 'quote_date', 'quote_total', 'due_date']), + ]; return View::make('public_list', $data); } diff --git a/app/handlers/UserEventHandler.php b/app/handlers/UserEventHandler.php index 5e6a24955287..19ee6f5de936 100755 --- a/app/handlers/UserEventHandler.php +++ b/app/handlers/UserEventHandler.php @@ -2,30 +2,29 @@ class UserEventHandler { - public function subscribe($events) - { - $events->listen('user.signup', 'UserEventHandler@onSignup'); - $events->listen('user.login', 'UserEventHandler@onLogin'); + public function subscribe($events) + { + $events->listen('user.signup', 'UserEventHandler@onSignup'); + $events->listen('user.login', 'UserEventHandler@onLogin'); - $events->listen('user.refresh', 'UserEventHandler@onRefresh'); - } + $events->listen('user.refresh', 'UserEventHandler@onRefresh'); + } - public function onSignup() - { - - } + public function onSignup() + { + } - public function onLogin() - { - $account = Auth::user()->account; - $account->last_login = Carbon::now()->toDateTimeString(); - $account->save(); + public function onLogin() + { + $account = Auth::user()->account; + $account->last_login = Carbon::now()->toDateTimeString(); + $account->save(); - Event::fire('user.refresh'); - } + Event::fire('user.refresh'); + } - public function onRefresh() - { - Auth::user()->account->loadLocalizationSettings(); - } -} \ No newline at end of file + public function onRefresh() + { + Auth::user()->account->loadLocalizationSettings(); + } +} diff --git a/app/models/Invitation.php b/app/models/Invitation.php index bb9f4db77a04..0100f75d96f7 100755 --- a/app/models/Invitation.php +++ b/app/models/Invitation.php @@ -17,6 +17,11 @@ class Invitation extends EntityModel return $this->belongsTo('User')->withTrashed(); } + public function account() + { + return $this->belongsTo('Account'); + } + public function getLink() { return SITE_URL.'/view/'.$this->invitation_key; diff --git a/app/views/list.blade.php b/app/views/list.blade.php index e0e473917ca7..4cc501c55d16 100755 --- a/app/views/list.blade.php +++ b/app/views/list.blade.php @@ -20,7 +20,7 @@