'contact_first_name', 'last' => 'contact_last_name', 'email' => 'contact_email', 'mobile|phone' => 'contact_phone', 'work|office' => 'work_phone', 'name|organization|vendor' => 'name', 'street2|address2' => 'address2', 'street|address|address1' => 'address1', 'city' => 'city', 'state|province' => 'state', 'zip|postal|code' => 'postal_code', 'country' => 'country', 'note' => 'notes', ]; } /** * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function account() { return $this->belongsTo('App\Models\Account'); } /** * @return mixed */ public function user() { return $this->belongsTo('App\Models\User')->withTrashed(); } /** * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function payments() { return $this->hasMany('App\Models\Payment'); } /** * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function vendor_contacts() { return $this->hasMany('App\Models\VendorContact'); } /** * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function country() { return $this->belongsTo('App\Models\Country'); } /** * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function currency() { return $this->belongsTo('App\Models\Currency'); } /** * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function language() { return $this->belongsTo('App\Models\Language'); } /** * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function size() { return $this->belongsTo('App\Models\Size'); } /** * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function industry() { return $this->belongsTo('App\Models\Industry'); } /** * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function expenses() { return $this->hasMany('App\Models\Expense', 'vendor_id', 'id'); } /** * @param $data * @param bool $isPrimary * * @return \Illuminate\Database\Eloquent\Model */ public function addVendorContact($data, $isPrimary = false) { $publicId = isset($data['public_id']) ? $data['public_id'] : (isset($data['id']) ? $data['id'] : false); if (! $this->wasRecentlyCreated && $publicId && intval($publicId) > 0) { $contact = VendorContact::scope($publicId)->whereVendorId($this->id)->firstOrFail(); } else { $contact = VendorContact::createNew(); } $contact->fill($data); $contact->is_primary = $isPrimary; return $this->vendor_contacts()->save($contact); } /** * @return string */ public function getRoute() { return "/vendors/{$this->public_id}"; } /** * @return mixed */ public function getName() { return $this->name; } /** * @return mixed */ public function getDisplayName() { return $this->getName(); } /** * @return string */ public function getCityState() { $swap = $this->country && $this->country->swap_postal_code; return Utils::cityStateZip($this->city, $this->state, $this->postal_code, $swap); } /** * @return string */ public function getEntityType() { return 'vendor'; } /** * @return bool */ public function showMap() { return $this->hasAddress() && env('GOOGLE_MAPS_ENABLED') !== false; } /** * @return bool */ public function hasAddress() { $fields = [ 'address1', 'address2', 'city', 'state', 'postal_code', 'country_id', ]; foreach ($fields as $field) { if ($this->$field) { return true; } } return false; } /** * @return string */ public function getDateCreated() { if ($this->created_at == '0000-00-00 00:00:00') { return '---'; } else { return $this->created_at->format('m/d/y h:i a'); } } /** * @return mixed */ public function getCurrencyId() { if ($this->currency_id) { return $this->currency_id; } if (! $this->account) { $this->load('account'); } return $this->account->currency_id ?: DEFAULT_CURRENCY; } /** * @return float|int */ public function getUnpaidExpenses() { return DB::table('expenses') ->select('expense_currency_id', DB::raw('sum(expenses.amount + (expenses.amount * expenses.tax_rate1 / 100) + (expenses.amount * expenses.tax_rate2 / 100)) as amount')) ->whereVendorId($this->id) ->whereIsDeleted(false) ->whereNull('payment_date') ->groupBy('expense_currency_id') ->get(); } } Vendor::creating(function ($vendor) { $vendor->setNullValues(); }); Vendor::created(function ($vendor) { event(new VendorWasCreated($vendor)); }); Vendor::updating(function ($vendor) { $vendor->setNullValues(); }); Vendor::updated(function ($vendor) { event(new VendorWasUpdated($vendor)); }); Vendor::deleting(function ($vendor) { $vendor->setNullValues(); }); Vendor::deleted(function ($vendor) { event(new VendorWasDeleted($vendor)); });