| 1 |  |  | <?php | 
            
                                                                                                            
                            
            
                                    
            
            
                | 2 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 3 |  |  | namespace IproSync\Models; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 4 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 5 |  |  | use Illuminate\Database\Eloquent\Casts\Attribute; | 
                            
                    |  |  |  | 
                                                                                        
                                                                                     | 
            
                                                                                                            
                            
            
                                    
            
            
                | 6 |  |  | use Illuminate\Database\Eloquent\Model; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 7 |  |  | use Illuminate\Database\Eloquent\Relations\BelongsTo; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 8 |  |  | use Illuminate\Database\Eloquent\Relations\HasMany; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 9 |  |  | use Illuminate\Support\Arr; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 10 |  |  | use IproSync\Jobs\Contacts\ContactPull; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 11 |  |  | use LaravelIproSoftwareApi\IproSoftwareFacade; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 12 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 13 |  |  | class Contact extends Model | 
            
                                                                                                            
                            
            
                                    
            
            
                | 14 |  |  | { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 15 |  |  |     use HasTraitsWithCasts, HasPullAt; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 16 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 17 |  |  |     public $incrementing = false; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 18 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 19 |  |  |     protected $guarded = []; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 20 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 21 |  |  |     public function getTable(): string | 
            
                                                                                                            
                            
            
                                    
            
            
                | 22 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 23 |  |  |         return config('iprosoftware-sync.tables.contacts'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 24 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 25 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 26 |  |  |     public function name(): Attribute | 
            
                                                                                                            
                            
            
                                    
            
            
                | 27 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 28 |  |  |         return Attribute::get(fn () => implode(' ', array_filter([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 29 |  |  |             $this->title, | 
                            
                    |  |  |  | 
                                                                                        
                                                                                     | 
            
                                                                                                            
                            
            
                                    
            
            
                | 30 |  |  |             $this->first_name, | 
                            
                    |  |  |  | 
                                                                                        
                                                                                     | 
            
                                                                                                            
                            
            
                                    
            
            
                | 31 |  |  |             $this->last_name, | 
                            
                    |  |  |  | 
                                                                                        
                                                                                     | 
            
                                                                                                            
                            
            
                                    
            
            
                | 32 |  |  |         ]))); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 33 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 34 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 35 |  |  |     public function updateInToIpro(array $only = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 36 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 37 |  |  |         $dataMap = [ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 38 |  |  |             'TypeId'       => 'type_id', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 39 |  |  |             'BrandId'      => 'brand_id', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 40 |  |  |             'Title'        => 'title', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 41 |  |  |             'FirstName'    => 'first_name', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 42 |  |  |             'LastName'     => 'last_name', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 43 |  |  |             'Email'        => 'email', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 44 |  |  |             'EmailAlt'     => 'email_alt', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 45 |  |  |             'EmailAlt1'    => 'email_alt_1', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 46 |  |  |             'Telephone'    => 'telephone', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 47 |  |  |             'TelephoneAlt' => 'telephone_alt', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 48 |  |  |             'Mobile'       => 'mobile', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 49 |  |  |             'Address'      => 'address', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 50 |  |  |             'StreetName'   => 'street_name', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 51 |  |  |             'TownCity'     => 'town_city', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 52 |  |  |             'CountyArea'   => 'county_area', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 53 |  |  |             'Postcode'     => 'postcode', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 54 |  |  |             'CountryCode'  => 'country_code', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 55 |  |  |             'CompanyName'  => 'company_name', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 56 |  |  |             'Comments'     => 'comments', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 57 |  |  |             'Balance'      => 'balance', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 58 |  |  |             'Retainer'     => 'Retainer', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 59 |  |  |             'DoNotMail'    => 'contact_by_post', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 60 |  |  |             'DoNotEmail'   => 'contact_by_email', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 61 |  |  |             'DoNotPhone'   => 'contact_by_phone', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 62 |  |  |             'OnEmailList'  => 'subscribed_to_mailing_list', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 63 |  |  |         ]; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 64 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 65 |  |  |         if (!empty($only)) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 66 |  |  |             $dataMap = array_flip(Arr::only(array_flip($dataMap), $only)); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 67 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 68 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 69 |  |  |         $formParams = []; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 70 |  |  |         foreach ($dataMap as $iproKey => $dbKey) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 71 |  |  |             if (in_array($iproKey, [ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 72 |  |  |                 'DoNotMail', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 73 |  |  |                 'DoNotEmail', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 74 |  |  |                 'DoNotPhone', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 75 |  |  |             ])) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 76 |  |  |                 $formParams[$iproKey] = !$this->$dbKey; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 77 |  |  |             } else { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 78 |  |  |                 $formParams[$iproKey] = $this->$dbKey; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 79 |  |  |             } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 80 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 81 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 82 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 83 |  |  |         IproSoftwareFacade::createOrUpdateContact([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 84 |  |  |             'query' => [ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 85 |  |  |                 'contactId' => $this->getKey(), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 86 |  |  |             ], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 87 |  |  |             'form_params' => $formParams, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 88 |  |  |         ])->onlySuccessful(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 89 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 90 |  |  |         ContactPull::dispatchSync($this->getKey()); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 91 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 92 |  |  |         return $this->refresh(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 93 |  |  |     } | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 94 |  |  |  | 
            
                                                                        
                            
            
                                    
            
            
                | 95 |  |  |     public function type(): BelongsTo | 
            
                                                                        
                            
            
                                    
            
            
                | 96 |  |  |     { | 
            
                                                                        
                            
            
                                    
            
            
                | 97 |  |  |         return $this->belongsTo(ContactType::class, 'type_id', 'id'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 98 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 99 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 100 |  |  |     public function ownedProperties(): HasMany | 
            
                                                                                                            
                            
            
                                    
            
            
                | 101 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 102 |  |  |         return $this->hasMany(Property::class, 'owner_contact_id', 'id'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 103 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 104 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 105 |  |  |     public function bookings(): HasMany | 
            
                                                                                                            
                            
            
                                    
            
            
                | 106 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 107 |  |  |         return $this->hasMany(Booking::class, 'contact_id', 'id'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 108 |  |  |     } | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 109 |  |  | } | 
            
                                                        
            
                                    
            
            
                | 110 |  |  |  | 
            
                        
Let?s assume that you have a directory layout like this:
. |-- OtherDir | |-- Bar.php | `-- Foo.php `-- SomeDir `-- Foo.phpand let?s assume the following content of
Bar.php:If both files
OtherDir/Foo.phpandSomeDir/Foo.phpare loaded in the same runtime, you will see a PHP error such as the following:PHP Fatal error: Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.phpHowever, as
OtherDir/Foo.phpdoes not necessarily have to be loaded and the error is only triggered if it is loaded beforeOtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias: