예제 #1
0
 public function createNinjaInvoice($client)
 {
     $account = $this->getNinjaAccount();
     $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 $invitation;
 }
 public function bulk($ids, $action, $statusId = false)
 {
     if (!$ids) {
         return 0;
     }
     $invoices = Invoice::withTrashed()->scope($ids)->get();
     foreach ($invoices as $invoice) {
         if ($action == 'mark') {
             $invoice->invoice_status_id = $statusId;
             $invoice->save();
         } elseif ($action == 'restore') {
             $invoice->restore();
         } else {
             if ($action == 'delete') {
                 $invoice->is_deleted = true;
                 $invoice->save();
             }
             $invoice->delete();
         }
     }
     return count($invoices);
 }
예제 #3
0
 public function invoiceHistory($publicId)
 {
     $invoice = Invoice::withTrashed()->scope($publicId)->firstOrFail();
     $invoice->load('user', 'invoice_items', 'account.country', 'client.contacts', 'client.country');
     $invoice->invoice_date = Utils::fromSqlDate($invoice->invoice_date);
     $invoice->due_date = Utils::fromSqlDate($invoice->due_date);
     $invoice->is_pro = Auth::user()->isPro();
     $invoice->is_quote = intval($invoice->is_quote);
     $activityTypeId = $invoice->is_quote ? ACTIVITY_TYPE_UPDATE_QUOTE : ACTIVITY_TYPE_UPDATE_INVOICE;
     $activities = Activity::scope(false, $invoice->account_id)->where('activity_type_id', '=', $activityTypeId)->where('invoice_id', '=', $invoice->id)->orderBy('id', 'desc')->get(['id', 'created_at', 'user_id', 'json_backup']);
     $versionsJson = [];
     $versionsSelect = [];
     $lastId = false;
     foreach ($activities as $activity) {
         $backup = json_decode($activity->json_backup);
         $backup->invoice_date = Utils::fromSqlDate($backup->invoice_date);
         $backup->due_date = Utils::fromSqlDate($backup->due_date);
         $backup->is_pro = Auth::user()->isPro();
         $backup->is_quote = isset($backup->is_quote) && intval($backup->is_quote);
         $backup->account = $invoice->account->toArray();
         $versionsJson[$activity->id] = $backup;
         $key = Utils::timestampToDateTimeString(strtotime($activity->created_at)) . ' - ' . $activity->user->getDisplayName();
         $versionsSelect[$lastId ? $lastId : 0] = $key;
         $lastId = $activity->id;
     }
     $versionsSelect[$lastId] = Utils::timestampToDateTimeString(strtotime($invoice->created_at)) . ' - ' . $invoice->user->getDisplayName();
     $data = ['invoice' => $invoice, 'versionsJson' => json_encode($versionsJson), 'versionsSelect' => $versionsSelect, 'invoiceDesigns' => InvoiceDesign::getDesigns()];
     return View::make('invoices.history', $data);
 }
 public function createNinjaInvoice($client, $clientAccount, $plan, $credit = 0)
 {
     $term = $plan['term'];
     $plan_cost = $plan['price'];
     $num_users = $plan['num_users'];
     $plan = $plan['plan'];
     if ($credit < 0) {
         $credit = 0;
     }
     $account = $this->getNinjaAccount();
     $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->invoice_date = $clientAccount->getRenewalDate();
     $invoice->amount = $invoice->balance = $plan_cost - $credit;
     $invoice->invoice_type_id = INVOICE_TYPE_STANDARD;
     $invoice->save();
     if ($credit) {
         $credit_item = InvoiceItem::createNew($invoice);
         $credit_item->qty = 1;
         $credit_item->cost = -$credit;
         $credit_item->notes = trans('texts.plan_credit_description');
         $credit_item->product_key = trans('texts.plan_credit_product');
         $invoice->invoice_items()->save($credit_item);
     }
     $item = InvoiceItem::createNew($invoice);
     $item->qty = 1;
     $item->cost = $plan_cost;
     $item->notes = trans("texts.{$plan}_plan_{$term}_description");
     if ($plan == PLAN_ENTERPRISE) {
         $min = Utils::getMinNumUsers($num_users);
         $item->notes .= "\n\n###" . trans('texts.min_to_max_users', ['min' => $min, 'max' => $num_users]);
     }
     // Don't change this without updating the regex in PaymentService->createPayment()
     $item->product_key = 'Plan - ' . ucfirst($plan) . ' (' . ucfirst($term) . ')';
     $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 $invitation;
 }
 public function createNinjaInvoice($client, $clientAccount, $plan = PLAN_PRO, $term = PLAN_TERM_MONTHLY, $credit = 0, $pending_monthly = false)
 {
     if ($credit < 0) {
         $credit = 0;
     }
     $plan_cost = Account::$plan_prices[$plan][$term];
     $account = $this->getNinjaAccount();
     $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->invoice_date = $clientAccount->getRenewalDate();
     $invoice->amount = $invoice->balance = $plan_cost - $credit;
     $invoice->save();
     if ($credit) {
         $credit_item = InvoiceItem::createNew($invoice);
         $credit_item->qty = 1;
         $credit_item->cost = -$credit;
         $credit_item->notes = trans('texts.plan_credit_description');
         $credit_item->product_key = trans('texts.plan_credit_product');
         $invoice->invoice_items()->save($credit_item);
     }
     $item = InvoiceItem::createNew($invoice);
     $item->qty = 1;
     $item->cost = $plan_cost;
     $item->notes = trans("texts.{$plan}_plan_{$term}_description");
     // Don't change this without updating the regex in PaymentService->createPayment()
     $item->product_key = 'Plan - ' . ucfirst($plan) . ' (' . ucfirst($term) . ')';
     $invoice->invoice_items()->save($item);
     if ($pending_monthly) {
         $term_end = $term == PLAN_MONTHLY ? date_create('+1 month') : date_create('+1 year');
         $pending_monthly_item = InvoiceItem::createNew($invoice);
         $item->qty = 1;
         $pending_monthly_item->cost = 0;
         $pending_monthly_item->notes = trans("texts.plan_pending_monthly", array('date', Utils::dateToString($term_end)));
         // Don't change this without updating the text in PaymentService->createPayment()
         $pending_monthly_item->product_key = 'Pending Monthly';
         $invoice->invoice_items()->save($pending_monthly_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 $invitation;
 }