FluentCrmApi('companies') to get the class instance * * @package FluentCrm\App\Api\Classes * @namespace FluentCrm\App\Api\Classes * * @version 2.8.0 */ class Companies { private $instance = null; private $allowedInstanceMethods = [ 'all', 'get', 'find', 'first', 'paginate' ]; public function __construct(Company $instance) { $this->instance = $instance; } public function getCompany($idOrName, $with = []) { if (is_numeric($idOrName)) { return Company::where('id', $idOrName)->with($with)->first(); } if (is_string($idOrName)) { return Company::where('email', $idOrName)->with($with)->first(); } return false; } public function createOrUpdate($data) { $exist = null; if (!empty($data['id'])) { $exist = Company::where('id', $data['id'])->first(); } else { $exist = Company::where('name', $data['name'])->first(); } if ($exist) { if (!empty($data['owner_id']) && $data['owner_id'] != $exist->owner_id) { $contact = Subscriber::find($data['owner_id']); if ($contact) { $contact->attachCompanies([$exist->id]); if (empty($contact->company_id)) { $contact->company_id = $exist->id; $contact->save(); } } } if (isset($data['custom_values'])) { $existingMeta = $exist->meta; $values = Arr::get($data, 'custom_values', []); $values = (new CustomCompanyField())->formatCustomFieldValues($values); $temp = $existingMeta['custom_values']; foreach ($values as $key => $value) { $temp[$key] = $value; } $existingMeta['custom_values'] = $temp; $exist->meta = $existingMeta; unset($data['custom_values']); } $exist->fill($data); $exist->save(); do_action('fluent_crm/company_updated', $exist, $data); return $exist; } else if (empty($data['name'])) { return false; } $fillables = (new Company())->getFillable(); $fillables[] = 'custom_values'; $data = Arr::only($data, $fillables); $values = Arr::get($data, 'custom_values', []); $values = (new CustomCompanyField())->formatCustomFieldValues($values); $data['meta'] = [ 'custom_values' => $values ]; $company = Company::create($data); do_action('fluent_crm/company_created', $company, $data); if ($company->owner_id) { $owner = Subscriber::find($company->owner_id); if ($owner) { $owner->attachCompanies([$company->id]); if (empty($owner->company_id)) { $owner->company_id = $company->id; $owner->save(); } } } return $company; } public function attachContactsByIds($contactIds, $companyIds) { $companyIds = array_map('intval', $companyIds); $subscriberIds = array_map('intval', $contactIds); $subscribers = Subscriber::whereIn('id', $subscriberIds)->get(); $companies = Company::whereIn('id', $companyIds)->get(); if ((count($companyIds) != count($companies)) || $subscribers->isEmpty() || $companies->isEmpty()) { return false; } $firstCompanyId = $companyIds[0]; $validIds = []; foreach ($companies as $company) { $validIds[] = $company->id; } foreach ($subscribers as $subscriber) { $subscriber->attachCompanies($validIds); if (!$subscriber->company_id) { $subscriber->company_id = $firstCompanyId; $subscriber->save(); } } return [ 'companies' => $companies, 'subscribers' => $subscribers ]; } public function detachContactsByIds($contactIds, $companyIds) { $companyIds = array_map('intval', $companyIds); $subscriberIds = array_map('intval', $contactIds); $subscribers = Subscriber::whereIn('id', $subscriberIds)->get(); $companies = Company::whereIn('id', $companyIds)->get(); if ((count($companyIds) != count($companies)) || $subscribers->isEmpty() || $companies->isEmpty()) { return false; } $validIds = []; foreach ($companies as $company) { if ($company->owner_id && in_array($company->owner_id, $subscriberIds)) { $company->owner_id = NULL; $company->save(); } $validIds[] = $company->id; } $lastPrimaryId = false; foreach ($subscribers as $subscriber) { $subscriber = $subscriber->detachCompanies($validIds); if (in_array($subscriber->company_id, $validIds)) { $companies = $subscriber->companies; if (count($companies)) { $lastPrimaryId = $companies[0]->id; $subscriber->company_id = $lastPrimaryId; $subscriber->save(); continue; } $subscriber->company_id = NULL; $subscriber->save(); } } return [ 'companies' => $companies, 'last_primary_company_id' => $lastPrimaryId ]; } }