Ensure models are touched appropriately"

This commit is contained in:
David Bomba 2020-07-16 21:01:39 +10:00
parent 23f12ef27c
commit 41b85b3fb3
30 changed files with 86 additions and 5 deletions

View File

@ -7,6 +7,7 @@ use App\Events\Invoice\InvoiceWasCreated;
use App\Factory\InvoiceFactory; use App\Factory\InvoiceFactory;
use App\Factory\InvoiceItemFactory; use App\Factory\InvoiceItemFactory;
use App\Helpers\Invoice\InvoiceSum; use App\Helpers\Invoice\InvoiceSum;
use App\Jobs\Ninja\CompanySizeCheck;
use App\Jobs\Util\VersionCheck; use App\Jobs\Util\VersionCheck;
use App\Models\CompanyToken; use App\Models\CompanyToken;
use App\Models\Country; use App\Models\Country;
@ -79,6 +80,9 @@ class DemoMode extends Command
$this->createSmallAccount(); $this->createSmallAccount();
VersionCheck::dispatchNow(); VersionCheck::dispatchNow();
CompanySizeCheck::dispatchNow();
} }
@ -360,7 +364,7 @@ class DemoMode extends Command
$this->invoice_repo->markSent($invoice); $this->invoice_repo->markSent($invoice);
if (rand(0, 1)) { if ((bool)rand(0, 2)) {
$invoice = $invoice->service()->markPaid()->save(); $invoice = $invoice->service()->markPaid()->save();

View File

@ -27,6 +27,8 @@ class CompanySettings extends BaseSettings
public $auto_archive_invoice = false; public $auto_archive_invoice = false;
public $lock_sent_invoices = false; public $lock_sent_invoices = false;
public $lock_invoices = 'off'; //off,when_sent,when_paid
public $enable_client_portal_tasks = false; public $enable_client_portal_tasks = false;
public $enable_client_portal_password = false; public $enable_client_portal_password = false;
public $enable_client_portal = true; //implemented public $enable_client_portal = true; //implemented
@ -236,6 +238,7 @@ class CompanySettings extends BaseSettings
public $client_portal_privacy_policy = ''; public $client_portal_privacy_policy = '';
public static $casts = [ public static $casts = [
'lock_invoices' => 'string',
'client_portal_terms' => 'string', 'client_portal_terms' => 'string',
'client_portal_privacy_policy' => 'string', 'client_portal_privacy_policy' => 'string',
'client_can_register' => 'bool', 'client_can_register' => 'bool',

View File

@ -34,7 +34,7 @@ class CompanyFactory
//$company->custom_fields = (object) ['invoice1' => '1', 'invoice2' => '2', 'client1'=>'3']; //$company->custom_fields = (object) ['invoice1' => '1', 'invoice2' => '2', 'client1'=>'3'];
$company->custom_fields = (object) []; $company->custom_fields = (object) [];
$company->subdomain = ''; $company->subdomain = '';
$company->enabled_modules = 4095; $company->enabled_modules = 4095; //16383
return $company; return $company;
} }

View File

@ -23,6 +23,9 @@ class PingController extends BaseController
*/ */
public function index() public function index()
{ {
return response()->json(['company_name' => auth()->user()->getCompany()->present()->name() - auth()->user()->present()->name()], 200); return response()->json(
['company_name' => auth()->user()->getCompany()->present()->name(),
'user_name' => auth()->user()->present()->name(),
], 200);
} }
} }

View File

@ -41,7 +41,7 @@ class PasswordProtection
} }
} elseif (Cache::get(auth()->user()->email."_logged_in")) { } elseif (Cache::get(auth()->user()->email."_logged_in")) {
Cache::pull(auth()->user()->email."_logged_in"); Cache::pull(auth()->user()->email."_logged_in");
Cache::add(auth()->user()->email."_logged_in", Str::random(64), now()->addMinutes(10)); Cache::add(auth()->user()->email."_logged_in", Str::random(64), now()->addMinutes(30));
return $next($request); return $next($request);
} else { } else {
@ -52,7 +52,7 @@ class PasswordProtection
return response()->json($error, 412); return response()->json($error, 412);
} }
Cache::add(auth()->user()->email."_logged_in", Str::random(64), now()->addMinutes(10)); Cache::add(auth()->user()->email."_logged_in", Str::random(64), now()->addMinutes(30));
return $next($request); return $next($request);
} }

View File

@ -116,6 +116,8 @@ class Client extends BaseModel implements HasLocalePreference
'deleted_at' => 'timestamp', 'deleted_at' => 'timestamp',
]; ];
protected $touches = ['company'];
public function getEntityType() public function getEntityType()
{ {
return Client::class; return Client::class;

View File

@ -37,6 +37,8 @@ class ClientContact extends Authenticatable implements HasLocalePreference
/* Used to authenticate a contact */ /* Used to authenticate a contact */
protected $guard = 'contact'; protected $guard = 'contact';
protected $touches = ['client'];
/* Allow microtime timestamps */ /* Allow microtime timestamps */
protected $dateFormat = 'Y-m-d H:i:s.u'; protected $dateFormat = 'Y-m-d H:i:s.u';

View File

@ -65,6 +65,22 @@ class Company extends BaseModel
const ENTITY_RECURRING_TASK = 'task'; const ENTITY_RECURRING_TASK = 'task';
const ENTITY_RECURRING_QUOTE = 'recurring_quote'; const ENTITY_RECURRING_QUOTE = 'recurring_quote';
// const int kModuleRecurringInvoices = 1;
// const int kModuleCredits = 2;
// const int kModuleQuotes = 4;
// const int kModuleTasks = 8;
// const int kModuleExpenses = 16;
// const int kModuleProjects = 32;
// const int kModuleVendors = 64;
// const int kModuleTickets = 128;
// const int kModuleProposals = 256;
// const int kModuleRecurringExpenses = 512;
// const int kModuleRecurringTasks = 1024;
// const int kModuleRecurringQuotes = 2048;
// kModuleInvoices = 4096;
// kModulePayments = 8192;
// 16383
protected $presenter = 'App\Models\Presenters\CompanyPresenter'; protected $presenter = 'App\Models\Presenters\CompanyPresenter';
protected $fillable = [ protected $fillable = [

View File

@ -58,6 +58,8 @@ class CompanyGateway extends BaseModel
// return json_decode($this->attributes['fees_and_limits']); // return json_decode($this->attributes['fees_and_limits']);
// } // }
protected $touches = ['company'];
public function getEntityType() public function getEntityType()
{ {
return CompanyGateway::class; return CompanyGateway::class;

View File

@ -27,6 +27,8 @@ class CompanyLedger extends Model
'deleted_at' => 'timestamp', 'deleted_at' => 'timestamp',
]; ];
protected $touches = ['company'];
public function getEntityType() public function getEntityType()
{ {
return CompanyLedger::class; return CompanyLedger::class;

View File

@ -27,6 +27,9 @@ class CompanyToken extends BaseModel
protected $with = [ protected $with = [
]; ];
protected $touches = ['company'];
public function getEntityType() public function getEntityType()
{ {
return CompanyToken::class; return CompanyToken::class;

View File

@ -48,6 +48,8 @@ class CompanyUser extends Pivot
'slack_webhook_url', 'slack_webhook_url',
]; ];
protected $touches = ['company'];
public function getEntityType() public function getEntityType()
{ {
return CompanyUser::class; return CompanyUser::class;

View File

@ -78,6 +78,8 @@ class Credit extends BaseModel
'deleted_at' => 'timestamp', 'deleted_at' => 'timestamp',
]; ];
protected $touches = ['company'];
const STATUS_DRAFT = 1; const STATUS_DRAFT = 1;
const STATUS_SENT = 2; const STATUS_SENT = 2;
const STATUS_PARTIAL = 3; const STATUS_PARTIAL = 3;

View File

@ -37,6 +37,8 @@ class CreditInvitation extends BaseModel
// 'company', // 'company',
]; ];
protected $touches = ['credit'];
public function getEntityType() public function getEntityType()
{ {
return CreditInvitation::class; return CreditInvitation::class;

View File

@ -60,6 +60,8 @@ class Expense extends BaseModel
'deleted_at' => 'timestamp', 'deleted_at' => 'timestamp',
]; ];
protected $touches = ['company'];
public function getEntityType() public function getEntityType()
{ {
return Expense::class; return Expense::class;

View File

@ -40,6 +40,8 @@ class GroupSetting extends StaticModel
'settings' 'settings'
]; ];
protected $touches = ['company'];
public function company() public function company()
{ {
return $this->belongsTo(Company::class); return $this->belongsTo(Company::class);

View File

@ -56,6 +56,8 @@ class Invoice extends BaseModel
protected $presenter = 'App\Models\Presenters\InvoicePresenter'; protected $presenter = 'App\Models\Presenters\InvoicePresenter';
protected $touches = ['company'];
protected $hidden = [ protected $hidden = [
'id', 'id',
'private_notes', 'private_notes',

View File

@ -36,6 +36,9 @@ class InvoiceInvitation extends BaseModel
// 'company', // 'company',
]; ];
protected $touches = ['invoice'];
public function getEntityType() public function getEntityType()
{ {
return InvoiceInvitation::class; return InvoiceInvitation::class;

View File

@ -81,6 +81,8 @@ class Payment extends BaseModel
'paymentables', 'paymentables',
]; ];
protected $touches = ['company'];
public function getEntityType() public function getEntityType()
{ {
return Payment::class; return Payment::class;

View File

@ -40,6 +40,8 @@ class Product extends BaseModel
'tax_rate3', 'tax_rate3',
]; ];
protected $touches = ['company'];
public function getEntityType() public function getEntityType()
{ {
return Product::class; return Product::class;

View File

@ -42,6 +42,8 @@ class Project extends BaseModel
return Project::class; return Project::class;
} }
protected $touches = ['company'];
/** /**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/ */

View File

@ -22,6 +22,8 @@ class Proposal extends BaseModel
'id', 'id',
]; ];
protected $touches = ['company'];
public function getEntityType() public function getEntityType()
{ {
return Proposal::class; return Proposal::class;

View File

@ -42,6 +42,8 @@ class Quote extends BaseModel
protected $presenter = 'App\Models\Presenters\QuotePresenter'; protected $presenter = 'App\Models\Presenters\QuotePresenter';
protected $touches = ['company'];
protected $fillable = [ protected $fillable = [
'assigned_user_id', 'assigned_user_id',
'number', 'number',

View File

@ -31,6 +31,8 @@ class QuoteInvitation extends BaseModel
'client_contact_id', 'client_contact_id',
]; ];
protected $touches = ['quote'];
public function getEntityType() public function getEntityType()
{ {
return QuoteInvitation::class; return QuoteInvitation::class;

View File

@ -112,6 +112,8 @@ class RecurringInvoice extends BaseModel
'status' 'status'
]; ];
protected $touches = ['company'];
public function getEntityType() public function getEntityType()
{ {
return RecurringInvoice::class; return RecurringInvoice::class;

View File

@ -18,6 +18,8 @@ class RecurringInvoiceInvitation extends BaseModel
{ {
use MakesDates; use MakesDates;
protected $touches = ['recurring_invoice'];
public function getEntityType() public function getEntityType()
{ {
return RecurringInvoiceInvitation::class; return RecurringInvoiceInvitation::class;

View File

@ -81,6 +81,8 @@ class RecurringQuote extends BaseModel
'start_date', 'start_date',
]; ];
protected $touches = ['company'];
protected $casts = [ protected $casts = [
'line_items' => 'object', 'line_items' => 'object',
'backup' => 'object', 'backup' => 'object',

View File

@ -30,6 +30,8 @@ class Task extends BaseModel
'time_log', 'time_log',
]; ];
protected $touches = ['company'];
protected $casts = [ protected $casts = [
'updated_at' => 'timestamp', 'updated_at' => 'timestamp',
'created_at' => 'timestamp', 'created_at' => 'timestamp',
@ -40,6 +42,11 @@ class Task extends BaseModel
return Task::class; return Task::class;
} }
public function company()
{
return $this->belongsTo(Company::class);
}
public function documents() public function documents()
{ {
return $this->morphMany(Document::class, 'documentable'); return $this->morphMany(Document::class, 'documentable');

View File

@ -53,6 +53,8 @@ class Vendor extends BaseModel
'deleted_at' => 'timestamp', 'deleted_at' => 'timestamp',
]; ];
protected $touches = ['company'];
protected $with = [ protected $with = [
// 'contacts', // 'contacts',
]; ];

View File

@ -37,6 +37,8 @@ class VendorContact extends Authenticatable implements HasLocalePreference
/* Used to authenticate a vendor */ /* Used to authenticate a vendor */
protected $guard = 'vendor'; protected $guard = 'vendor';
protected $touches = ['vendor'];
/* Allow microtime timestamps */ /* Allow microtime timestamps */
protected $dateFormat = 'Y-m-d H:i:s.u'; protected $dateFormat = 'Y-m-d H:i:s.u';