1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-10 05:02:36 +01:00

Merge pull request #4134 from turbo124/v2

Work on Recurring Invoices
This commit is contained in:
David Bomba 2020-10-06 21:08:12 +11:00 committed by GitHub
commit 1212ea756d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
31 changed files with 603 additions and 191 deletions

View File

@ -52,7 +52,7 @@ TRUSTED_PROXIES=
NINJA_ENVIRONMENT=selfhost
PHANTOMJS_CLOUD_KEY='a-demo-key-with-low-quota-per-ip-address'
PHANTOMJS_KEY='a-demo-key-with-low-quota-per-ip-address'
PHANTOMJS_SECRET=
SELF_UPDATER_REPO_VENDOR = invoiceninja

View File

@ -16,6 +16,7 @@ use App\Events\Invoice\InvoiceWasCreated;
use App\Factory\InvoiceFactory;
use App\Factory\InvoiceItemFactory;
use App\Helpers\Invoice\InvoiceSum;
use App\Jobs\Company\CreateCompanyPaymentTerms;
use App\Jobs\Ninja\CompanySizeCheck;
use App\Jobs\Util\VersionCheck;
use App\Models\Account;
@ -173,6 +174,8 @@ class DemoMode extends Command
]);
}
CreateCompanyPaymentTerms::dispatchNow($company, $user);
$company_token = new CompanyToken;
$company_token->user_id = $user->id;
$company_token->company_id = $company->id;
@ -198,7 +201,7 @@ class DemoMode extends Command
if (! $u2) {
$u2 = User::factory()->create([
'email' => 'demo@invoiceninja.com',
'password' => Hash::make('demo'),
'password' => Hash::make('Password0'),
'account_id' => $account->id,
'confirmation_code' => $this->createDbHash(config('database.default')),
]);

View File

@ -112,7 +112,7 @@ class ImportMigrations extends Command
public function getCompany(Account $account): Company
{
$company = factory(Company::class)->create([
$company = Company::factory()->create([
'account_id' => $account->id,
]);

View File

@ -78,6 +78,9 @@ class CompanySettings extends BaseSettings
public $invoice_number_pattern = '';
public $invoice_number_counter = 1;
public $recurring_invoice_number_pattern = '';
public $recurring_invoice_number_counter = 1;
public $quote_number_pattern = '';
public $quote_number_counter = 1;
@ -246,6 +249,8 @@ class CompanySettings extends BaseSettings
public $client_portal_allow_over_payment = false;
public static $casts = [
'recurring_invoice_number_pattern' => 'string',
'recurring_invoice_number_counter' => 'int',
'client_portal_under_payment_minimum'=> 'float',
'auto_bill_date' => 'string',
'primary_color' => 'string',

View File

@ -38,6 +38,7 @@ class InvoiceItemFactory
$item->custom_value2 = '';
$item->custom_value3 = '';
$item->custom_value4 = '';
$item->type_id = "1";
return $item;
}
@ -68,7 +69,8 @@ class InvoiceItemFactory
$item->custom_value4 = $faker->realText(10);
$item->tax_name1 = 'GST';
$item->tax_rate1 = 10.00;
$item->type_id = "1";
$data[] = $item;
}
@ -101,6 +103,7 @@ class InvoiceItemFactory
$item->custom_value4 = $faker->realText(10);
$item->tax_name1 = 'GST';
$item->tax_rate1 = 10.00;
$item->type_id = "1";
$data[] = $item;
}

View File

@ -0,0 +1,38 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Factory;
use App\Models\RecurringInvoiceInvitation;
use Illuminate\Support\Str;
class RecurringInvoiceInvitationFactory
{
public static function create(int $company_id, int $user_id) :RecurringInvoiceInvitation
{
$ii = new RecurringInvoiceInvitation;
$ii->company_id = $company_id;
$ii->user_id = $user_id;
$ii->client_contact_id = null;
$ii->recurring_invoice_id = null;
$ii->key = Str::random(config('ninja.key_length'));
$ii->transaction_reference = null;
$ii->message_id = null;
$ii->email_error = '';
$ii->signature_base64 = '';
$ii->signature_date = null;
$ii->sent_date = null;
$ii->viewed_date = null;
$ii->opened_date = null;
return $ii;
}
}

View File

@ -270,7 +270,7 @@ class MigrationController extends BaseController
// If keys ain't same, but existing company with force.
if (! $checks['same_keys'] && $checks['existing_company'] && $checks['with_force']) {
info('Migrating: Different keys, exisiting company with force option.');
info('Migrating: Different keys, existing company with force option.');
if ($company) {
$this->purgeCompany($company);

View File

@ -33,6 +33,11 @@ class ContactKeyLogin
*/
public function handle($request, Closure $next)
{
info($request->segment(3));
info($request->route('contact_key'));
if(Auth::guard('contact')->check())
Auth::guard('contact')->logout();
if ($request->segment(3) && config('ninja.db.multi_db_enabled')) {

View File

@ -97,12 +97,13 @@ class StoreRecurringInvoiceRequest extends Request
$input['line_items'] = isset($input['line_items']) ? $this->cleanItems($input['line_items']) : [];
if(isset($input['auto_bill']))
$input['auto_bill_enabled'] = $this->setAutoBillFlag($input['auto_bill']);
else{
$client = Client::find($input['client_id']);
$input['auto_bill'] = $client->getSetting('auto_bill');
}
if(isset($input['auto_bill']))
$input['auto_bill_enabled'] = $this->setAutoBillFlag($input['auto_bill']);
else{
if($client = Client::find($input['client_id']))
$input['auto_bill'] = $client->getSetting('auto_bill');
}
$this->replace($input);
}

View File

@ -42,14 +42,6 @@ class StoreVendorRequest extends Request
//$rules['settings'] = new ValidVendorGroupSettingsRule();
$rules['contacts.*.email'] = 'nullable|distinct';
// $contacts = request('contacts');
// if (is_array($contacts)) {
// for ($i = 0; $i < count($contacts); $i++) {
// //$rules['contacts.' . $i . '.email'] = 'nullable|email|distinct';
// }
// }
return $rules;
}

View File

@ -22,6 +22,7 @@ use App\Factory\InvoiceFactory;
use App\Factory\PaymentFactory;
use App\Factory\ProductFactory;
use App\Factory\QuoteFactory;
use App\Factory\RecurringInvoiceFactory;
use App\Factory\TaxRateFactory;
use App\Factory\UserFactory;
use App\Http\Requests\Company\UpdateCompanyRequest;
@ -46,6 +47,7 @@ use App\Models\Payment;
use App\Models\PaymentTerm;
use App\Models\Product;
use App\Models\Quote;
use App\Models\RecurringInvoice;
use App\Models\TaxRate;
use App\Models\User;
use App\Repositories\ClientContactRepository;
@ -99,12 +101,14 @@ class Import implements ShouldQueue
'clients',
'products',
'invoices',
'recurring_invoices',
'quotes',
'payments',
'credits',
'company_gateways',
//'documents',
'client_gateway_tokens',
// //'documents',
];
/**
@ -478,6 +482,59 @@ class Import implements ShouldQueue
$product_repository = null;
}
private function processRecurringInvoices(array $data) :void
{
RecurringInvoice::unguard();
$rules = [
'*.client_id' => ['required'],
];
$validator = Validator::make($data, $rules);
if ($validator->fails()) {
throw new MigrationValidatorFailed(json_encode($validator->errors()));
}
$invoice_repository = new InvoiceMigrationRepository();
foreach ($data as $key => $resource) {
$modified = $resource;
if (array_key_exists('client_id', $resource) && ! array_key_exists('clients', $this->ids)) {
throw new ResourceDependencyMissing('Processing invoices failed, because of missing dependency - clients.');
}
$modified['client_id'] = $this->transformId('clients', $resource['client_id']);
$modified['user_id'] = $this->processUserId($resource);
$modified['company_id'] = $this->company->id;
$modified['line_items'] = $this->cleanItems($modified['line_items']);
unset($modified['id']);
$invoice = $invoice_repository->save(
$modified,
RecurringInvoiceFactory::create($this->company->id, $modified['user_id'])
);
$key = "recurring_invoices_{$resource['id']}";
$this->ids['recurring_invoices'][$key] = [
'old' => $resource['id'],
'new' => $invoice->id,
];
}
RecurringInvoice::reguard();
/*Improve memory handling by setting everything to null when we have finished*/
$data = null;
$invoice_repository = null;
}
private function processInvoices(array $data): void
{
Invoice::unguard();

View File

@ -28,6 +28,8 @@ class MigrationCompleted extends Mailable
*/
public function build()
{
return $this->view('email.migration.completed');
$data['settings'] = auth()->user()->company()->settings;
return $this->view('email.migration.completed', $data);
}
}

View File

@ -21,11 +21,16 @@ class Gateway extends StaticModel
'is_secure' => 'boolean',
'recommended' => 'boolean',
//'visible' => 'boolean',
//'sort_order' => 'int',
'sort_order' => 'int',
'updated_at' => 'timestamp',
'created_at' => 'timestamp',
'default_gateway_type_id' => 'string',
'fields' => 'json',
'options' => 'array',
];
protected $appends = [
'options',
];
protected $dateFormat = 'Y-m-d H:i:s.u';
@ -45,6 +50,12 @@ class Gateway extends StaticModel
}
}
public function getOptionsAttribute()
{
return $this->getMethods();
}
/**
* Test if gateway is custom.
* @return bool TRUE|FALSE
@ -83,4 +94,30 @@ class Gateway extends StaticModel
//return $key != $str ? $str : '';
}
/**
* Returns an array of methods and the gatewaytypes possible
*
* @return array
*/
public function getMethods()
{
switch ($this->id) {
case 1:
return ['methods' => [GatewayType::CREDIT_CARD], 'refund' => true, 'token_billing' => true ]; //Authorize.net
break;
case 15:
return ['methods' => [GatewayType::PAYPAL], 'refund' => true, 'token_billing' => false ]; //Paypal
break;
case 20:
return ['methods' => [GatewayType::CREDIT_CARD, GatewayType::BANK_TRANSFER, GatewayType::ALIPAY, GatewayType::APPLE_PAY], 'refund' => true, 'token_billing' => true ]; //Stripe
break;
case 39:
return ['methods' => [GatewayType::CREDIT_CARD], 'refund' => true, 'token_billing' => true ]; //Checkout
break;
default:
return [];
break;
}
}
}

View File

@ -392,13 +392,13 @@ class RecurringInvoice extends BaseModel
{
// we don't add the days... we calc the day of the month!!
$next_due_date = $this->calculateDueDate($next_send_date->copy()->format('Y-m-d'));
$next_due_date_string = $next_due_date ? $next_due_date->format('Y-m-d') : '';
$next_send_date = Carbon::parse($next_send_date);
$next_due_date = Carbon::parse($next_due_date);
$data[] = [
'send_date' => $next_send_date->format('Y-m-d'),
'due_date' => $next_due_date->format('Y-m-d'),
'due_date' => $next_due_date_string
];
$next_send_date = $this->nextDateByFrequency($next_send_date->format('Y-m-d'));
@ -406,12 +406,12 @@ class RecurringInvoice extends BaseModel
}
/*If no due date is set - unset the due_date value */
if(!$this->due_date_days || $this->due_date_days == 0){
// if(!$this->due_date_days || $this->due_date_days == 0){
foreach($data as $key => $value)
$data[$key]['due_date'] = '';
// foreach($data as $key => $value)
// $data[$key]['due_date'] = '';
}
// }
return $data;

View File

@ -11,11 +11,18 @@
namespace App\Models;
use App\Models\RecurringInvoice;
use App\Utils\Traits\Inviteable;
use App\Utils\Traits\MakesDates;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class RecurringInvoiceInvitation extends BaseModel
{
use MakesDates;
use SoftDeletes;
use Inviteable;
protected $fillable = ['client_contact_id'];
protected $touches = ['recurring_invoice'];
@ -25,6 +32,11 @@ class RecurringInvoiceInvitation extends BaseModel
return self::class;
}
public function entityType()
{
return RecurringInvoice::class;
}
/**
* @return mixed
*/

View File

@ -23,6 +23,7 @@ use App\Models\Credit;
use App\Models\Invoice;
use App\Models\Payment;
use App\Models\Quote;
use App\Models\RecurringInvoice;
use App\Repositories\ActivityRepository;
use App\Repositories\BaseRepository;
use App\Repositories\CreditRepository;
@ -54,7 +55,7 @@ class InvoiceMigrationRepository extends BaseRepository
$resource = explode('\\', $class->name)[2]; /** This will extract 'Invoice' from App\Models\Invoice */
$lcfirst_resource_id = lcfirst($resource).'_id';
if ($class->name == Invoice::class || $class->name == Quote::class) {
if ($class->name == Invoice::class || $class->name == Quote::class || $class->name == RecurringInvoice::class) {
$state['starting_amount'] = $model->amount;
}
@ -141,7 +142,7 @@ class InvoiceMigrationRepository extends BaseRepository
UpdateOrCreateProduct::dispatch($model->line_items, $model, $model->company);
}
if ($class->name == Invoice::class) {
if ($class->name == Invoice::class || $class->name == RecurringInvoice::class) {
if (($state['finished_amount'] != $state['starting_amount']) && ($model->status_id != Invoice::STATUS_DRAFT)) {
// $model->ledger()->updateInvoiceBalance(($state['finished_amount'] - $state['starting_amount']));

View File

@ -33,6 +33,8 @@ class RecurringInvoiceRepository extends BaseRepository
$invoice_calc = new InvoiceSum($invoice, $invoice->settings);
$invoice->service()->applyNumber()->save();
$invoice = $invoice_calc->build()->getInvoice();
return $invoice;

View File

@ -0,0 +1,58 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Services\Recurring;
use App\Models\Client;
use App\Services\AbstractService;
use App\Utils\Traits\GeneratesCounter;
class ApplyNumber extends AbstractService
{
use GeneratesCounter;
private $client;
private $recurring_entity;
public function __construct(Client $client, $recurring_entity)
{
$this->client = $client;
$this->recurring_entity = $recurring_entity;
}
/* Recurring numbers are set when saved */
public function run()
{
if ($this->recurring_entity->number != '') {
return $this->recurring_entity;
}
$this->recurring_entity->number = $this->getNextRecurringInvoiceNumber($this->client);
// switch ($this->client->getSetting('counter_number_applied')) {
// case 'when_saved':
// $this->recurring_entity->number = $this->getNextRecurringInvoiceNumber($this->client);
// break;
// case 'when_sent':
// break;
// default:
// $this->recurring_entity->number = $this->getNextRecurringInvoiceNumber($this->client);
// break;
// }
return $this->recurring_entity;
}
}

View File

@ -0,0 +1,74 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Services\Recurring;
use App\Factory\InvoiceInvitationFactory;
use App\Factory\RecurringInvoiceFactory;
use App\Models\Invoice;
use App\Models\RecurringInvoice;
use App\Models\InvoiceInvitation;
use App\Models\RecurringInvoiceInvitation;
use App\Services\AbstractService;
use Illuminate\Support\Str;
class CreateRecurringInvitations extends AbstractService
{
private $entity;
private $entity_name;
private $entity_id_name;
private $invitation_class;
private $invitation_factory;
public function __construct($entity)
{
$this->entity = $entity;
$this->entity_name = lcfirst(Str::snake(class_basename($entity)));
$this->entity_id_name = $this->entity_name . "_id";
$this->invitation_class = 'App\Models\\' . ucfirst(Str::camel($this->entity_name)) . "Invitation";
$this->invitation_factory = 'App\Factory\\' . ucfirst(Str::camel($this->entity_name)) . "InvitationFactory";
}
public function run()
{
try {
$this->entity->client->contacts->each(function ($contact) {
$invitation = $this->invitation_class::whereCompanyId($this->entity->company_id)
->whereClientContactId($contact->id)
->where($this->entity_id_name, $this->entity->id)
->withTrashed()
->first();
if (! $invitation && $contact->send_email) {
$ii = $this->invitation_factory::create($this->entity->company_id, $this->entity->user_id);
$ii->{$this->entity_id_name} = $this->entity->id;
$ii->client_contact_id = $contact->id;
$ii->save();
} elseif ($invitation && ! $contact->send_email) {
$invitation->delete();
}
});
}
catch(\Exception $e)
{
info($e->getMessage());
}
return $this->entity;
}
}

View File

@ -12,6 +12,8 @@
namespace App\Services\Recurring;
use App\Models\RecurringInvoice;
use App\Services\Recurring\ApplyNumber;
use App\Services\Recurring\CreateRecurringInvitations;
use Illuminate\Support\Carbon;
class RecurringService
@ -37,6 +39,13 @@ class RecurringService
return $this;
}
public function createInvitations()
{
$this->recurring_entity = (new CreateRecurringInvitations($this->recurring_entity))->run();
return $this;
}
public function start()
{
//make sure next_send_date is either now or in the future else return.
@ -49,6 +58,17 @@ class RecurringService
}
/**
* Applies the invoice number.
* @return $this InvoiceService object
*/
public function applyNumber()
{
$this->recurring_entity = (new ApplyNumber($this->recurring_entity->client, $this->recurring_entity))->run();
return $this;
}
public function save()
{
$this->recurring_entity->save();

View File

@ -22,12 +22,16 @@ class RecurringInvoiceInvitationTransformer extends EntityTransformer
public function transform(RecurringInvoiceInvitation $invitation)
{
return [
'id' => $this->encodePrimaryKey($invitation->id),
'id' => $this->encodePrimaryKey($invitation->id),
'client_contact_id' => $this->encodePrimaryKey($invitation->client_contact_id),
'key' => $invitation->key,
'key' => $invitation->key,
'link' => $invitation->getLink() ?: '',
'sent_date' => $invitation->sent_date ?: '',
'viewed_date' => $invitation->viewed_date ?: '',
'opened_date' => $invitation->opened_date ?: '',
'updated_at' => (int) $invitation->updated_at,
'archived_at' => (int) $invitation->deleted_at,
'created_at' => (int) $invitation->created_at,
'created_at' => (int) $invitation->created_at,
];
}
}

View File

@ -34,6 +34,7 @@ class SystemHealth
'mbstring',
'xml',
'bcmath',
'mysqlnd',
];
private static $php_version = 7.3;

View File

@ -12,6 +12,10 @@
namespace App\Utils;
use App\DataMapper\EmailTemplateDefaults;
use App\Models\Client;
use App\Models\ClientContact;
use App\Models\Invoice;
use App\Models\InvoiceInvitation;
use App\Utils\Traits\MakesHash;
use App\Utils\Traits\MakesInvoiceHtml;
use App\Utils\Traits\MakesTemplateData;
@ -71,6 +75,8 @@ class TemplateEngine
$class = 'App\Models\\'.ucfirst($this->entity);
$this->entity_obj = $class::whereId($this->decodePrimaryKey($this->entity_id))->company()->first();
}
else
$this->mockEntity();
return $this;
}
@ -195,6 +201,56 @@ class TemplateEngine
'wrapper' => $wrapper,
];
$this->tearDown();
return $data;
}
private function mockEntity()
{
\DB::beginTransaction();
$client = Client::factory()->create([
'user_id' => auth()->user()->id,
'company_id' => auth()->user()->company()->id,
]);
$contact = ClientContact::factory()->create([
'user_id' => auth()->user()->id,
'company_id' => auth()->user()->company()->id,
'client_id' => $client->id,
'is_primary' => 1,
'send_email' => true,
]);
$this->entity_obj = Invoice::factory()->create([
'user_id' => auth()->user()->id,
'company_id' => auth()->user()->company()->id,
'client_id' => $client->id,
]);
$invitation = InvoiceInvitation::factory()->create([
'user_id' => auth()->user()->id,
'company_id' => auth()->user()->company()->id,
'invoice_id' => $this->entity_obj->id,
'client_contact_id' => $contact->id,
]);
$this->entity_obj->setRelation('invitations', $invitation);
$this->entity_obj->setRelation('client', $client);
$this->entity_obj->setRelation('company', auth()->user()->company());
$this->entity_obj->load('client');
$client->setRelation('company', auth()->user()->company());
$client->load('company');
}
private function tearDown()
{
\DB::rollBack();
}
}

View File

@ -154,27 +154,27 @@ trait GeneratesCounter
$is_client_counter = false;
//todo handle if we have specific client patterns in the future
$pattern = $client->company->settings->invoice_number_pattern;
$pattern = $client->company->settings->recurring_invoice_number_pattern;
//Determine if we are using client_counters
if (strpos($pattern, 'client_counter') === false) {
$counter = $client->company->settings->invoice_number_counter;
$counter = $client->company->settings->recurring_invoice_number_counter;
} else {
$counter = $client->settings->invoice_number_counter;
$counter = $client->settings->recurring_invoice_number_counter;
$is_client_counter = true;
}
//Return a valid counter
$pattern = '';
$padding = $client->getSetting('counter_padding');
$invoice_number = $this->checkEntityNumber(Invoice::class, $client, $counter, $padding, $pattern);
$invoice_number = $this->checkEntityNumber(RecurringInvoice::class, $client, $counter, $padding, $pattern);
$invoice_number = $this->prefixCounter($invoice_number, $client->getSetting('recurring_number_prefix'));
//increment the correct invoice_number Counter (company vs client)
if ($is_client_counter) {
$this->incrementCounter($client, 'invoice_number_counter');
$this->incrementCounter($client, 'recurring_invoice_number_counter');
} else {
$this->incrementCounter($client->company, 'invoice_number_counter');
$this->incrementCounter($client->company, 'recurring_invoice_number_counter');
}
return $invoice_number;

View File

@ -213,7 +213,9 @@ trait MakesInvoiceValues
$data['$number'] = ['value' => $this->number ?: '&nbsp;', 'label' => ctrans('texts.invoice_number')];
$data['$entity.terms'] = ['value' => $this->terms ?: '&nbsp;', 'label' => ctrans('texts.invoice_terms')];
$data['$terms'] = &$data['$entity.terms'];
$data['$view_link'] = ['value' => '<a href="'.$invitation->getLink().'">'.ctrans('texts.view_invoice').'</a>', 'label' => ctrans('texts.view_invoice')];
if($invitation)
$data['$view_link'] = ['value' => '<a href="'.$invitation->getLink().'">'.ctrans('texts.view_invoice').'</a>', 'label' => ctrans('texts.view_invoice')];
// $data['$view_link'] = ['value' => $invitation->getLink(), 'label' => ctrans('texts.view_invoice')];
}
@ -222,7 +224,9 @@ trait MakesInvoiceValues
$data['$number'] = ['value' => $this->number ?: '&nbsp;', 'label' => ctrans('texts.quote_number')];
$data['$entity.terms'] = ['value' => $this->terms ?: '&nbsp;', 'label' => ctrans('texts.quote_terms')];
$data['$terms'] = &$data['$entity.terms'];
$data['$view_link'] = ['value' => '<a href="'.$invitation->getLink().'">'.ctrans('texts.view_quote').'</a>', 'label' => ctrans('texts.view_quote')];
if($invitation)
$data['$view_link'] = ['value' => '<a href="'.$invitation->getLink().'">'.ctrans('texts.view_quote').'</a>', 'label' => ctrans('texts.view_quote')];
// $data['$view_link'] = ['value' => $invitation->getLink(), 'label' => ctrans('texts.view_quote')];
}
@ -231,7 +235,9 @@ trait MakesInvoiceValues
$data['$number'] = ['value' => $this->number ?: '&nbsp;', 'label' => ctrans('texts.credit_number')];
$data['$entity.terms'] = ['value' => $this->terms ?: '&nbsp;', 'label' => ctrans('texts.credit_terms')];
$data['$terms'] = &$data['$entity.terms'];
$data['$view_link'] = ['value' => '<a href="'.$invitation->getLink().'">'.ctrans('texts.view_credit').'</a>', 'label' => ctrans('texts.view_credit')];
if($invitation)
$data['$view_link'] = ['value' => '<a href="'.$invitation->getLink().'">'.ctrans('texts.view_credit').'</a>', 'label' => ctrans('texts.view_credit')];
// $data['$view_link'] = ['value' => $invitation->getLink(), 'label' => ctrans('texts.view_credit')];
}

276
composer.lock generated
View File

@ -108,16 +108,16 @@
},
{
"name": "aws/aws-sdk-php",
"version": "3.157.0",
"version": "3.158.2",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
"reference": "ad2c0183d7ebc695acb1ba39d528f2328f2c0de3"
"reference": "b80957465d94c127254e36061dd3d0c3ccc94cc1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/ad2c0183d7ebc695acb1ba39d528f2328f2c0de3",
"reference": "ad2c0183d7ebc695acb1ba39d528f2328f2c0de3",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/b80957465d94c127254e36061dd3d0c3ccc94cc1",
"reference": "b80957465d94c127254e36061dd3d0c3ccc94cc1",
"shasum": ""
},
"require": {
@ -189,7 +189,7 @@
"s3",
"sdk"
],
"time": "2020-09-30T18:58:20+00:00"
"time": "2020-10-05T18:13:27+00:00"
},
{
"name": "brick/math",
@ -355,23 +355,23 @@
},
{
"name": "clue/stream-filter",
"version": "v1.4.1",
"version": "v1.5.0",
"source": {
"type": "git",
"url": "https://github.com/clue/php-stream-filter.git",
"reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71"
"reference": "aeb7d8ea49c7963d3b581378955dbf5bc49aa320"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/clue/php-stream-filter/zipball/5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71",
"reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71",
"url": "https://api.github.com/repos/clue/php-stream-filter/zipball/aeb7d8ea49c7963d3b581378955dbf5bc49aa320",
"reference": "aeb7d8ea49c7963d3b581378955dbf5bc49aa320",
"shasum": ""
},
"require": {
"php": ">=5.3"
},
"require-dev": {
"phpunit/phpunit": "^5.0 || ^4.8"
"phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36"
},
"type": "library",
"autoload": {
@ -389,7 +389,7 @@
"authors": [
{
"name": "Christian Lück",
"email": "christian@lueck.tv"
"email": "christian@clue.engineering"
}
],
"description": "A simple and modern approach to stream filtering in PHP",
@ -403,7 +403,17 @@
"stream_filter_append",
"stream_filter_register"
],
"time": "2019-04-09T12:31:48+00:00"
"funding": [
{
"url": "https://clue.engineering/support",
"type": "custom"
},
{
"url": "https://github.com/clue",
"type": "github"
}
],
"time": "2020-10-02T12:38:20+00:00"
},
{
"name": "composer/ca-bundle",
@ -1767,16 +1777,16 @@
},
{
"name": "google/apiclient-services",
"version": "v0.148",
"version": "v0.149",
"source": {
"type": "git",
"url": "https://github.com/googleapis/google-api-php-client-services.git",
"reference": "692a8d4c6a89458570e0d804624c50120cdd6388"
"reference": "6a44aa8dc22b181594ba93c2ffb5d731c318c810"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/692a8d4c6a89458570e0d804624c50120cdd6388",
"reference": "692a8d4c6a89458570e0d804624c50120cdd6388",
"url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/6a44aa8dc22b181594ba93c2ffb5d731c318c810",
"reference": "6a44aa8dc22b181594ba93c2ffb5d731c318c810",
"shasum": ""
},
"require": {
@ -1800,20 +1810,20 @@
"keywords": [
"google"
],
"time": "2020-09-26T00:26:16+00:00"
"time": "2020-10-05T00:26:25+00:00"
},
{
"name": "google/auth",
"version": "v1.13.0",
"version": "v1.14.0",
"source": {
"type": "git",
"url": "https://github.com/googleapis/google-auth-library-php.git",
"reference": "173191f5defd1d9ae8bdfc28da31b63eb73dd34e"
"reference": "95c23ebd89a0a4d1b511aed81426f57388ab7268"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/173191f5defd1d9ae8bdfc28da31b63eb73dd34e",
"reference": "173191f5defd1d9ae8bdfc28da31b63eb73dd34e",
"url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/95c23ebd89a0a4d1b511aed81426f57388ab7268",
"reference": "95c23ebd89a0a4d1b511aed81426f57388ab7268",
"shasum": ""
},
"require": {
@ -1852,7 +1862,7 @@
"google",
"oauth2"
],
"time": "2020-09-18T20:03:05+00:00"
"time": "2020-10-02T22:20:36+00:00"
},
{
"name": "graham-campbell/result-type",
@ -2487,16 +2497,16 @@
},
{
"name": "laravel/framework",
"version": "v8.7.1",
"version": "v8.8.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "3fb29e904a152b3e1fe49581f66ba5e02fe991f2"
"reference": "0bdd5c6f12cb7cb6644e484169656245af417735"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/3fb29e904a152b3e1fe49581f66ba5e02fe991f2",
"reference": "3fb29e904a152b3e1fe49581f66ba5e02fe991f2",
"url": "https://api.github.com/repos/laravel/framework/zipball/0bdd5c6f12cb7cb6644e484169656245af417735",
"reference": "0bdd5c6f12cb7cb6644e484169656245af417735",
"shasum": ""
},
"require": {
@ -2646,7 +2656,7 @@
"framework",
"laravel"
],
"time": "2020-09-29T15:39:07+00:00"
"time": "2020-10-02T14:33:08+00:00"
},
{
"name": "laravel/slack-notification-channel",
@ -3870,16 +3880,16 @@
},
{
"name": "nesbot/carbon",
"version": "2.40.1",
"version": "2.41.0",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
"reference": "d9a76d8b7eb0f97cf3a82529393245212f40ba3b"
"reference": "8690b13ad4da6d54d692afea15aab30b36fee52e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/d9a76d8b7eb0f97cf3a82529393245212f40ba3b",
"reference": "d9a76d8b7eb0f97cf3a82529393245212f40ba3b",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8690b13ad4da6d54d692afea15aab30b36fee52e",
"reference": "8690b13ad4da6d54d692afea15aab30b36fee52e",
"shasum": ""
},
"require": {
@ -3955,7 +3965,7 @@
"type": "tidelift"
}
],
"time": "2020-09-23T08:17:37+00:00"
"time": "2020-10-04T09:11:05+00:00"
},
{
"name": "nikic/php-parser",
@ -5658,24 +5668,25 @@
},
{
"name": "sabre/uri",
"version": "2.2.0",
"version": "2.2.1",
"source": {
"type": "git",
"url": "https://github.com/sabre-io/uri.git",
"reference": "059d11012603be2e32ddb7543602965563ddbb09"
"reference": "f502edffafea8d746825bd5f0b923a60fd2715ff"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sabre-io/uri/zipball/059d11012603be2e32ddb7543602965563ddbb09",
"reference": "059d11012603be2e32ddb7543602965563ddbb09",
"url": "https://api.github.com/repos/sabre-io/uri/zipball/f502edffafea8d746825bd5f0b923a60fd2715ff",
"reference": "f502edffafea8d746825bd5f0b923a60fd2715ff",
"shasum": ""
},
"require": {
"php": "^7.1"
"php": "^7.1 || ^8.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "~2.16.1",
"phpunit/phpunit": "^7 || ^8"
"phpstan/phpstan": "^0.12",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.0"
},
"type": "library",
"autoload": {
@ -5705,7 +5716,7 @@
"uri",
"url"
],
"time": "2020-01-31T18:53:43+00:00"
"time": "2020-10-03T10:33:23+00:00"
},
{
"name": "sabre/xml",
@ -5928,16 +5939,16 @@
},
{
"name": "sentry/sentry",
"version": "3.0.0",
"version": "3.0.2",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-php.git",
"reference": "b77ff3783060ce3213011ddae369e550ec985dc8"
"reference": "a35c6c71693a72f2fedb9b6f9644ced52268771d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/getsentry/sentry-php/zipball/b77ff3783060ce3213011ddae369e550ec985dc8",
"reference": "b77ff3783060ce3213011ddae369e550ec985dc8",
"url": "https://api.github.com/repos/getsentry/sentry-php/zipball/a35c6c71693a72f2fedb9b6f9644ced52268771d",
"reference": "a35c6c71693a72f2fedb9b6f9644ced52268771d",
"shasum": ""
},
"require": {
@ -6024,20 +6035,20 @@
"type": "custom"
}
],
"time": "2020-09-28T07:11:32+00:00"
"time": "2020-10-02T14:16:36+00:00"
},
{
"name": "sentry/sentry-laravel",
"version": "2.0.0",
"version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-laravel.git",
"reference": "ed8f28507f18474223df7de4c86e210c09dda630"
"reference": "1815b6e7c037f9495768e906f978e1a15d7a2944"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/ed8f28507f18474223df7de4c86e210c09dda630",
"reference": "ed8f28507f18474223df7de4c86e210c09dda630",
"url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/1815b6e7c037f9495768e906f978e1a15d7a2944",
"reference": "1815b6e7c037f9495768e906f978e1a15d7a2944",
"shasum": ""
},
"require": {
@ -6048,6 +6059,7 @@
"require-dev": {
"friendsofphp/php-cs-fixer": "2.16.*",
"laravel/framework": "^7.0",
"mockery/mockery": "1.3.*",
"orchestra/testbench": "^5.0",
"phpunit/phpunit": "^8.0"
},
@ -6104,7 +6116,7 @@
"type": "custom"
}
],
"time": "2020-09-28T08:31:49+00:00"
"time": "2020-10-06T08:40:32+00:00"
},
{
"name": "spatie/browsershot",
@ -6488,7 +6500,7 @@
},
{
"name": "symfony/console",
"version": "v5.1.6",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
@ -6581,7 +6593,7 @@
},
{
"name": "symfony/css-selector",
"version": "v5.1.6",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
@ -6712,16 +6724,16 @@
},
{
"name": "symfony/error-handler",
"version": "v5.1.6",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
"reference": "d2f1d4996d5499f1261164d10080e4120001f041"
"reference": "5e4d8ef8d71822922d1eebd130219ae3491a5ca9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/d2f1d4996d5499f1261164d10080e4120001f041",
"reference": "d2f1d4996d5499f1261164d10080e4120001f041",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/5e4d8ef8d71822922d1eebd130219ae3491a5ca9",
"reference": "5e4d8ef8d71822922d1eebd130219ae3491a5ca9",
"shasum": ""
},
"require": {
@ -6779,11 +6791,11 @@
"type": "tidelift"
}
],
"time": "2020-09-27T03:44:28+00:00"
"time": "2020-10-02T08:49:02+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v5.1.6",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
@ -6946,16 +6958,16 @@
},
{
"name": "symfony/filesystem",
"version": "v5.1.6",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "f3194303d3077829dbbc1d18f50288b2a01146f2"
"reference": "1a8697545a8d87b9f2f6b1d32414199cc5e20aae"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/f3194303d3077829dbbc1d18f50288b2a01146f2",
"reference": "f3194303d3077829dbbc1d18f50288b2a01146f2",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/1a8697545a8d87b9f2f6b1d32414199cc5e20aae",
"reference": "1a8697545a8d87b9f2f6b1d32414199cc5e20aae",
"shasum": ""
},
"require": {
@ -7006,11 +7018,11 @@
"type": "tidelift"
}
],
"time": "2020-09-02T16:23:27+00:00"
"time": "2020-09-27T14:02:37+00:00"
},
{
"name": "symfony/finder",
"version": "v5.1.6",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
@ -7073,16 +7085,16 @@
},
{
"name": "symfony/http-client",
"version": "v5.1.6",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "4a5f2750b54e3cfc5b6711dd78fdbac6563ee7bf"
"reference": "df757997ee95101c0ca94c7ea2b76e16a758e0ca"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/4a5f2750b54e3cfc5b6711dd78fdbac6563ee7bf",
"reference": "4a5f2750b54e3cfc5b6711dd78fdbac6563ee7bf",
"url": "https://api.github.com/repos/symfony/http-client/zipball/df757997ee95101c0ca94c7ea2b76e16a758e0ca",
"reference": "df757997ee95101c0ca94c7ea2b76e16a758e0ca",
"shasum": ""
},
"require": {
@ -7155,7 +7167,7 @@
"type": "tidelift"
}
],
"time": "2020-09-27T03:44:28+00:00"
"time": "2020-10-02T14:24:03+00:00"
},
{
"name": "symfony/http-client-contracts",
@ -7234,16 +7246,16 @@
},
{
"name": "symfony/http-foundation",
"version": "v5.1.6",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "6cca6b2e4b69fc5bace160d14cf1ee5f71483db4"
"reference": "353b42e7b4fd1c898aab09a059466c9cea74039b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/6cca6b2e4b69fc5bace160d14cf1ee5f71483db4",
"reference": "6cca6b2e4b69fc5bace160d14cf1ee5f71483db4",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/353b42e7b4fd1c898aab09a059466c9cea74039b",
"reference": "353b42e7b4fd1c898aab09a059466c9cea74039b",
"shasum": ""
},
"require": {
@ -7305,20 +7317,20 @@
"type": "tidelift"
}
],
"time": "2020-09-13T05:01:27+00:00"
"time": "2020-09-27T14:14:57+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v5.1.6",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "17227644c3c66dcf32bdfeceff4364d090cd6756"
"reference": "1764b87d2f10d5c9ce6e4850fe27934116d89708"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/17227644c3c66dcf32bdfeceff4364d090cd6756",
"reference": "17227644c3c66dcf32bdfeceff4364d090cd6756",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/1764b87d2f10d5c9ce6e4850fe27934116d89708",
"reference": "1764b87d2f10d5c9ce6e4850fe27934116d89708",
"shasum": ""
},
"require": {
@ -7419,11 +7431,11 @@
"type": "tidelift"
}
],
"time": "2020-09-27T04:33:19+00:00"
"time": "2020-10-04T07:57:28+00:00"
},
{
"name": "symfony/mime",
"version": "v5.1.6",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
@ -7500,7 +7512,7 @@
},
{
"name": "symfony/options-resolver",
"version": "v5.1.6",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
@ -8427,7 +8439,7 @@
},
{
"name": "symfony/process",
"version": "v5.1.6",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
@ -8491,16 +8503,16 @@
},
{
"name": "symfony/routing",
"version": "v5.1.6",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "d36e06eb02a55522a8eed070c1cbc3dc3c389876"
"reference": "720348c2ae011f8c56964c0fc3e992840cb60ccf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/d36e06eb02a55522a8eed070c1cbc3dc3c389876",
"reference": "d36e06eb02a55522a8eed070c1cbc3dc3c389876",
"url": "https://api.github.com/repos/symfony/routing/zipball/720348c2ae011f8c56964c0fc3e992840cb60ccf",
"reference": "720348c2ae011f8c56964c0fc3e992840cb60ccf",
"shasum": ""
},
"require": {
@ -8579,7 +8591,7 @@
"type": "tidelift"
}
],
"time": "2020-09-02T16:23:27+00:00"
"time": "2020-10-02T13:05:43+00:00"
},
{
"name": "symfony/service-contracts",
@ -8659,7 +8671,7 @@
},
{
"name": "symfony/string",
"version": "v5.1.6",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
@ -8744,7 +8756,7 @@
},
{
"name": "symfony/translation",
"version": "v5.1.6",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
@ -8836,16 +8848,16 @@
},
{
"name": "symfony/translation-contracts",
"version": "v2.2.0",
"version": "v2.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
"reference": "77ce1c3627c9f39643acd9af086631f842c50c4d"
"reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/77ce1c3627c9f39643acd9af086631f842c50c4d",
"reference": "77ce1c3627c9f39643acd9af086631f842c50c4d",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105",
"reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105",
"shasum": ""
},
"require": {
@ -8857,7 +8869,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
"dev-master": "2.3-dev"
},
"thanks": {
"name": "symfony/contracts",
@ -8907,11 +8919,11 @@
"type": "tidelift"
}
],
"time": "2020-09-07T11:33:47+00:00"
"time": "2020-09-28T13:05:58+00:00"
},
{
"name": "symfony/var-dumper",
"version": "v5.1.6",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
@ -9849,16 +9861,16 @@
},
{
"name": "facade/ignition",
"version": "2.3.7",
"version": "2.3.8",
"source": {
"type": "git",
"url": "https://github.com/facade/ignition.git",
"reference": "b364db8860a63c1fb58b72b9718863c21df08762"
"reference": "e8fed9c382cd1d02b5606688576a35619afdf82c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/facade/ignition/zipball/b364db8860a63c1fb58b72b9718863c21df08762",
"reference": "b364db8860a63c1fb58b72b9718863c21df08762",
"url": "https://api.github.com/repos/facade/ignition/zipball/e8fed9c382cd1d02b5606688576a35619afdf82c",
"reference": "e8fed9c382cd1d02b5606688576a35619afdf82c",
"shasum": ""
},
"require": {
@ -9917,7 +9929,7 @@
"laravel",
"page"
],
"time": "2020-09-06T19:26:27+00:00"
"time": "2020-10-01T23:01:14+00:00"
},
{
"name": "facade/ignition-contracts",
@ -10657,16 +10669,16 @@
},
{
"name": "phpunit/php-code-coverage",
"version": "9.1.11",
"version": "9.2.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "c9394cb9d07ecfa9351b96f2e296bad473195f4d"
"reference": "53a4b737e83be724efd2bc4e7b929b9a30c48972"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c9394cb9d07ecfa9351b96f2e296bad473195f4d",
"reference": "c9394cb9d07ecfa9351b96f2e296bad473195f4d",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/53a4b737e83be724efd2bc4e7b929b9a30c48972",
"reference": "53a4b737e83be724efd2bc4e7b929b9a30c48972",
"shasum": ""
},
"require": {
@ -10694,7 +10706,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "9.1-dev"
"dev-master": "9.2-dev"
}
},
"autoload": {
@ -10726,7 +10738,7 @@
"type": "github"
}
],
"time": "2020-09-19T05:29:17+00:00"
"time": "2020-10-02T03:37:32+00:00"
},
{
"name": "phpunit/php-file-iterator",
@ -10955,16 +10967,16 @@
},
{
"name": "phpunit/phpunit",
"version": "9.3.11",
"version": "9.4.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "f7316ea106df7c9507f4fdaa88c47bc10a3b27a1"
"reference": "ef533467a7974c4b6c354f3eff42a115910bd4e5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f7316ea106df7c9507f4fdaa88c47bc10a3b27a1",
"reference": "f7316ea106df7c9507f4fdaa88c47bc10a3b27a1",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ef533467a7974c4b6c354f3eff42a115910bd4e5",
"reference": "ef533467a7974c4b6c354f3eff42a115910bd4e5",
"shasum": ""
},
"require": {
@ -10980,7 +10992,7 @@
"phar-io/version": "^3.0.2",
"php": ">=7.3",
"phpspec/prophecy": "^1.11.1",
"phpunit/php-code-coverage": "^9.1.11",
"phpunit/php-code-coverage": "^9.2",
"phpunit/php-file-iterator": "^3.0.4",
"phpunit/php-invoker": "^3.1",
"phpunit/php-text-template": "^2.0.2",
@ -11011,7 +11023,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "9.3-dev"
"dev-master": "9.4-dev"
}
},
"autoload": {
@ -11050,7 +11062,7 @@
"type": "github"
}
],
"time": "2020-09-24T08:08:49+00:00"
"time": "2020-10-02T03:54:37+00:00"
},
{
"name": "scrivo/highlight.php",
@ -11181,16 +11193,16 @@
},
{
"name": "sebastian/code-unit",
"version": "1.0.6",
"version": "1.0.7",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/code-unit.git",
"reference": "d3a241b6028ff9d8e97d2b6ebd4090d01f92fad8"
"reference": "59236be62b1bb9919e6d7f60b0b832dc05cef9ab"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/d3a241b6028ff9d8e97d2b6ebd4090d01f92fad8",
"reference": "d3a241b6028ff9d8e97d2b6ebd4090d01f92fad8",
"url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/59236be62b1bb9919e6d7f60b0b832dc05cef9ab",
"reference": "59236be62b1bb9919e6d7f60b0b832dc05cef9ab",
"shasum": ""
},
"require": {
@ -11229,7 +11241,7 @@
"type": "github"
}
],
"time": "2020-09-28T05:28:46+00:00"
"time": "2020-10-02T14:47:54+00:00"
},
{
"name": "sebastian/code-unit-reverse-lookup",
@ -11928,16 +11940,16 @@
},
{
"name": "sebastian/type",
"version": "2.2.2",
"version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
"reference": "e494dcaeb89d1458c9ccd8c819745245a1669aea"
"reference": "fa592377f3923946cb90bf1f6a71ba2e5f229909"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/e494dcaeb89d1458c9ccd8c819745245a1669aea",
"reference": "e494dcaeb89d1458c9ccd8c819745245a1669aea",
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fa592377f3923946cb90bf1f6a71ba2e5f229909",
"reference": "fa592377f3923946cb90bf1f6a71ba2e5f229909",
"shasum": ""
},
"require": {
@ -11949,7 +11961,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
"dev-master": "2.3-dev"
}
},
"autoload": {
@ -11976,7 +11988,7 @@
"type": "github"
}
],
"time": "2020-09-28T06:01:38+00:00"
"time": "2020-10-06T08:41:03+00:00"
},
{
"name": "sebastian/version",
@ -12029,16 +12041,16 @@
},
{
"name": "swagger-api/swagger-ui",
"version": "v3.34.0",
"version": "v3.35.0",
"source": {
"type": "git",
"url": "git@github.com:swagger-api/swagger-ui.git",
"reference": "c20a8c479eaa7897a2ddabcaf5f75e6d41f4525c"
"url": "https://github.com/swagger-api/swagger-ui.git",
"reference": "db2cca8e8691f48c1e27a543e1cee97e760c0742"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/swagger-api/swagger-ui/zipball/c20a8c479eaa7897a2ddabcaf5f75e6d41f4525c",
"reference": "c20a8c479eaa7897a2ddabcaf5f75e6d41f4525c",
"url": "https://api.github.com/repos/swagger-api/swagger-ui/zipball/db2cca8e8691f48c1e27a543e1cee97e760c0742",
"reference": "db2cca8e8691f48c1e27a543e1cee97e760c0742",
"shasum": ""
},
"type": "library",
@ -12082,11 +12094,11 @@
"swagger",
"ui"
],
"time": "2020-09-18T18:46:18+00:00"
"time": "2020-10-01T18:14:37+00:00"
},
{
"name": "symfony/debug",
"version": "v4.4.14",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
@ -12157,7 +12169,7 @@
},
{
"name": "symfony/yaml",
"version": "v5.1.6",
"version": "v5.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",

View File

@ -34,7 +34,7 @@ class ProjectFactory extends Factory
{
return [
'name' => $this->faker->name(),
'description' => $this->faker->text(50),
'public_notes' => $this->faker->text(50),
];
}
}

View File

@ -1182,19 +1182,19 @@ class CreateUsersTable extends Migration
$table->timestamps(6);
$table->softDeletes();
$table->unsignedInteger('user_id');
$table->unsignedInteger('assigned_user_id');
$table->unsignedInteger('assigned_user_id')->nullable();
$table->unsignedInteger('company_id');
$table->unsignedInteger('currency_id')->nullable();
$table->string('name')->nullable();
$table->string('address1');
$table->string('address2');
$table->string('city');
$table->string('state');
$table->string('postal_code');
$table->string('address1')->nullable();
$table->string('address2')->nullable();
$table->string('city')->nullable();
$table->string('state')->nullable();
$table->string('postal_code')->nullable();
$table->unsignedInteger('country_id')->nullable();
$table->string('work_phone');
$table->text('private_notes');
$table->string('website');
$table->string('work_phone')->nullable();
$table->text('private_notes')->nullable();
$table->string('website')->nullable();
$table->tinyInteger('is_deleted')->default(0);
$table->string('vat_number')->nullable();
$table->string('transaction_name')->nullable();

View File

@ -18,6 +18,30 @@ class UpdateGatewayTableVisibleColumn extends Migration
Gateway::whereIn('id', [1,15,20,39])->update(['visible' => 1]);
Schema::table('recurring_invoice_invitations', function ($t) {
$t->string('transaction_reference')->nullable();
$t->string('message_id')->nullable();
$t->mediumText('email_error')->nullable();
$t->text('signature_base64')->nullable();
$t->datetime('signature_date')->nullable();
$t->datetime('sent_date')->nullable();
$t->datetime('viewed_date')->nullable();
$t->datetime('opened_date')->nullable();
});
Schema::table('expenses', function ($t){
$t->renameColumn('invoice_category_id', 'category_id');
});
Schema::table('projects', function ($t){
$t->text('public_notes')->nullable();
$t->dropColumn('description');
$t->decimal('budgeted_hours', 12,2)->change();
});
}

View File

@ -10,7 +10,6 @@
*/
namespace Database\Seeders;
use App\Models\PaymentTerm;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Seeder;

View File

@ -1,9 +1,8 @@
<!DOCTYPE html>
<html>
<html data-report-errors="{{ $report_errors }}">
<head>
<meta charset="UTF-8">
<title>Invoice Ninja</title>
<meta name="report_errors" content="{{ $report_errors }}">
<meta name="google-signin-client_id" content="{{ config('services.google.client_id') }}">
<link rel="manifest" href="manifest.json?v={{ $hash }}">
</head>
@ -11,11 +10,12 @@
<style>
/* fix for blurry fonts */
/* fix for blurry fonts
flt-glass-pane {
image-rendering: pixelated;
}
*/
/* https://projects.lukehaas.me/css-loaders/ */
.loader,
.loader:before,