Наследование: extends BaseRepository
 /**
  * @param $invitationKey
  * @param bool $gatewayType
  * @param bool $sourceId
  * @return \Illuminate\Http\RedirectResponse
  */
 public function showPayment($invitationKey, $gatewayTypeAlias = false, $sourceId = false)
 {
     if (!($invitation = $this->invoiceRepo->findInvoiceByInvitation($invitationKey))) {
         return response()->view('error', ['error' => trans('texts.invoice_not_found'), 'hideHeader' => true]);
     }
     if (!$invitation->invoice->canBePaid()) {
         return redirect()->to('view/' . $invitation->invitation_key);
     }
     $invitation = $invitation->load('invoice.client.account.account_gateways.gateway');
     $account = $invitation->account;
     $account->loadLocalizationSettings($invitation->invoice->client);
     if (!$gatewayTypeAlias) {
         $gatewayTypeId = Session::get($invitation->id . 'gateway_type');
     } elseif ($gatewayTypeAlias != GATEWAY_TYPE_TOKEN) {
         $gatewayTypeId = GatewayType::getIdFromAlias($gatewayTypeAlias);
     } else {
         $gatewayTypeId = $gatewayTypeAlias;
     }
     $paymentDriver = $account->paymentDriver($invitation, $gatewayTypeId);
     try {
         return $paymentDriver->startPurchase(Input::all(), $sourceId);
     } catch (Exception $exception) {
         return $this->error($paymentDriver, $exception);
     }
 }
 public function edit(ExpenseRequest $request)
 {
     $expense = $request->entity();
     $expense->expense_date = Utils::fromSqlDate($expense->expense_date);
     $actions = [];
     if ($expense->invoice) {
         $actions[] = ['url' => URL::to("invoices/{$expense->invoice->public_id}/edit"), 'label' => trans('texts.view_invoice')];
     } else {
         $actions[] = ['url' => 'javascript:submitAction("invoice")', 'label' => trans('texts.invoice_expense')];
         // check for any open invoices
         $invoices = $expense->client_id ? $this->invoiceRepo->findOpenInvoices($expense->client_id, ENTITY_EXPENSE) : [];
         foreach ($invoices as $invoice) {
             $actions[] = ['url' => 'javascript:submitAction("add_to_invoice", ' . $invoice->public_id . ')', 'label' => trans('texts.add_to_invoice', ['invoice' => $invoice->invoice_number])];
         }
     }
     $actions[] = \DropdownButton::DIVIDER;
     if (!$expense->trashed()) {
         $actions[] = ['url' => 'javascript:submitAction("archive")', 'label' => trans('texts.archive_expense')];
         $actions[] = ['url' => 'javascript:onDeleteClick()', 'label' => trans('texts.delete_expense')];
     } else {
         $actions[] = ['url' => 'javascript:submitAction("restore")', 'label' => trans('texts.restore_expense')];
     }
     $data = ['vendor' => null, 'expense' => $expense, 'method' => 'PUT', 'url' => 'expenses/' . $expense->public_id, 'title' => 'Edit Expense', 'actions' => $actions, 'vendors' => Vendor::scope()->with('vendor_contacts')->orderBy('name')->get(), 'vendorPublicId' => $expense->vendor ? $expense->vendor->public_id : null, 'clients' => Client::scope()->with('contacts')->orderBy('name')->get(), 'clientPublicId' => $expense->client ? $expense->client->public_id : null, 'categoryPublicId' => $expense->expense_category ? $expense->expense_category->public_id : null];
     $data = array_merge($data, self::getViewModel());
     return View::make('expenses.edit', $data);
 }
 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 frequency_id > 0 AND start_date <= ? AND (end_date IS NULL OR end_date >= ?)', [$today, $today])->orderBy('id', 'asc')->get();
     $this->info(count($invoices) . ' recurring invoice(s) found');
     foreach ($invoices as $recurInvoice) {
         $shouldSendToday = $recurInvoice->shouldSendToday();
         $this->info('Processing Invoice ' . $recurInvoice->id . ' - Should send ' . ($shouldSendToday ? 'YES' : 'NO'));
         if (!$shouldSendToday) {
             continue;
         }
         $recurInvoice->account->loadLocalizationSettings($recurInvoice->client);
         $invoice = $this->invoiceRepo->createRecurringInvoice($recurInvoice);
         if ($invoice && !$invoice->isPaid()) {
             $this->info('Sending Invoice');
             $this->mailer->sendInvoice($invoice);
         }
     }
     $delayedAutoBillInvoices = Invoice::with('account.timezone', 'recurring_invoice', 'invoice_items', 'client', 'user')->whereRaw('is_deleted IS FALSE AND deleted_at IS NULL AND is_recurring IS FALSE
         AND balance > 0 AND due_date = ? AND recurring_invoice_id IS NOT NULL', [$today->format('Y-m-d')])->orderBy('invoices.id', 'asc')->get();
     $this->info(count($delayedAutoBillInvoices) . ' due recurring invoice instance(s) found');
     /** @var Invoice $invoice */
     foreach ($delayedAutoBillInvoices as $invoice) {
         if ($invoice->isPaid()) {
             continue;
         }
         if ($invoice->getAutoBillEnabled() && $invoice->client->autoBillLater()) {
             $this->info('Processing Autobill-delayed Invoice ' . $invoice->id);
             $this->paymentService->autoBillInvoice($invoice);
         }
     }
     $this->info('Done');
 }
Пример #4
0
 /**
  * Show the form for editing the specified resource.
  *
  * @param TaskRequest $request
  *
  * @return \Illuminate\Contracts\View\View
  */
 public function edit(TaskRequest $request)
 {
     $this->checkTimezone();
     $task = $request->entity();
     $actions = [];
     if ($task->invoice) {
         $actions[] = ['url' => URL::to("invoices/{$task->invoice->public_id}/edit"), 'label' => trans('texts.view_invoice')];
     } else {
         $actions[] = ['url' => 'javascript:submitAction("invoice")', 'label' => trans('texts.invoice_task')];
         // check for any open invoices
         $invoices = $task->client_id ? $this->invoiceRepo->findOpenInvoices($task->client_id, ENTITY_TASK) : [];
         foreach ($invoices as $invoice) {
             $actions[] = ['url' => 'javascript:submitAction("add_to_invoice", ' . $invoice->public_id . ')', 'label' => trans('texts.add_to_invoice', ['invoice' => $invoice->invoice_number])];
         }
     }
     $actions[] = DropdownButton::DIVIDER;
     if (!$task->trashed()) {
         $actions[] = ['url' => 'javascript:submitAction("archive")', 'label' => trans('texts.archive_task')];
         $actions[] = ['url' => 'javascript:onDeleteClick()', 'label' => trans('texts.delete_task')];
     } else {
         $actions[] = ['url' => 'javascript:submitAction("restore")', 'label' => trans('texts.restore_task')];
     }
     $data = ['task' => $task, 'entity' => $task, 'clientPublicId' => $task->client ? $task->client->public_id : 0, 'method' => 'PUT', 'url' => 'tasks/' . $task->public_id, 'title' => trans('texts.edit_task'), 'actions' => $actions, 'timezone' => Auth::user()->account->timezone ? Auth::user()->account->timezone->name : DEFAULT_TIMEZONE, 'datetimeFormat' => Auth::user()->account->getMomentDateTimeFormat()];
     $data = array_merge($data, self::getViewModel());
     return View::make('tasks.edit', $data);
 }
Пример #5
0
 private function initMaps()
 {
     $this->init();
     $this->maps = ['client' => [], 'invoice' => [], 'invoice_client' => [], 'product' => [], 'countries' => [], 'countries2' => [], 'currencies' => [], 'client_ids' => [], 'invoice_ids' => [], 'vendors' => [], 'expense_categories' => []];
     $clients = $this->clientRepo->all();
     foreach ($clients as $client) {
         $this->addClientToMaps($client);
     }
     $invoices = $this->invoiceRepo->all();
     foreach ($invoices as $invoice) {
         $this->addInvoiceToMaps($invoice);
     }
     $products = $this->productRepo->all();
     foreach ($products as $product) {
         $this->addProductToMaps($product);
     }
     $countries = Cache::get('countries');
     foreach ($countries as $country) {
         $this->maps['countries'][strtolower($country->name)] = $country->id;
         $this->maps['countries2'][strtolower($country->iso_3166_2)] = $country->id;
     }
     $currencies = Cache::get('currencies');
     foreach ($currencies as $currency) {
         $this->maps['currencies'][strtolower($currency->code)] = $currency->id;
     }
     $vendors = $this->vendorRepo->all();
     foreach ($vendors as $vendor) {
         $this->addVendorToMaps($vendor);
     }
     $expenseCaegories = $this->expenseCategoryRepo->all();
     foreach ($expenseCaegories as $category) {
         $this->addExpenseCategoryToMaps($category);
     }
 }
Пример #6
0
 public function getDatatable($accountId, $clientPublicId = null, $entityType, $search)
 {
     $datatable = new InvoiceDatatable(!$clientPublicId, $clientPublicId);
     $datatable->entityType = $entityType;
     $query = $this->invoiceRepo->getInvoices($accountId, $clientPublicId, $entityType, $search)->where('invoices.invoice_type_id', '=', $entityType == ENTITY_QUOTE ? INVOICE_TYPE_QUOTE : INVOICE_TYPE_STANDARD);
     if (!Utils::hasPermission('view_all')) {
         $query->where('invoices.user_id', '=', Auth::user()->id);
     }
     return $this->datatableService->createDatatable($datatable, $query);
 }
Пример #7
0
 public function fire()
 {
     $this->info(date('Y-m-d') . ' Running SendReminders...');
     $accounts = $this->accountRepo->findWithReminders();
     $this->info(count($accounts) . ' accounts found');
     /** @var \App\Models\Account $account */
     foreach ($accounts as $account) {
         if (!$account->hasFeature(FEATURE_EMAIL_TEMPLATES_REMINDERS)) {
             continue;
         }
         $invoices = $this->invoiceRepo->findNeedingReminding($account);
         $this->info($account->name . ': ' . count($invoices) . ' invoices found');
         /** @var Invoice $invoice */
         foreach ($invoices as $invoice) {
             if ($reminder = $account->getInvoiceReminder($invoice)) {
                 $this->info('Send to ' . $invoice->id);
                 $this->mailer->sendInvoice($invoice, $reminder);
             }
         }
     }
     $this->info('Done');
 }