/** * @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'); }
/** * 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); }
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); } }
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); }
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'); }