id = $id; $this->local = $local; $this->exists = true; if ($local) { $this->full = true; $data = $database->get("clients", ['name', 'phone', 'email', 'billingaddress', 'mailingaddress', 'publicnotes', 'privatenotes'], ["clientid" => $id]); $this->setName($data['name'] . ""); $this->setPhone($data['phone'] . ""); $this->setEmail($data['email'] . ""); $this->setBillingAddress($data['billingaddress'] . ""); $this->setMailingAddress($data['mailingaddress'] . ""); $this->setPublicNotes($data['publicnotes'] . ""); $this->setPrivateNotes($data['privatenotes'] . ""); } else { $this->full = false; $this->name = $name; } } } public function jsonSerialize() { return [ "id" => $this->id, "name" => $this->name ]; } /** * Fill in all the client data from the InvoiceNinja API. */ private function fullerize() { global $SETTINGS; if (!$this->local && !$this->full && $this->exists) { try { $client = NinjaClient::find($this->id); $this->full = true; // Name $this->setName($client->display_name); // Phone if (!empty($client->work_phone)) { $this->setPhone($client->work_phone); } else if (!empty($client->contacts[0]->phone)) { $this->setPhone($client->contacts[0]->phone); } if (!empty($client->contacts[0]->email)) { $this->setEmail($client->contacts[0]->email); } $billingaddress = [ $client->address1, $client->address2, implode(" ", array_filter([$client->city, $client->state, $client->postal_code])) ]; $this->setBillingAddress(implode("\n", array_filter($billingaddress))); $mailingaddress = [ $client->shipping_address1, $client->shipping_address2, implode(" ", array_filter([$client->shipping_city, $client->shipping_state, $client->shipping_postal_code])) ]; $this->setMailingAddress(implode("\n", array_filter($mailingaddress))); $this->setPublicNotes($client->public_notes); $this->setPrivateNotes($client->private_notes); } catch (Exception $ex) { if ($SETTINGS['debug']) { echo $ex->getTraceAsString(); } sendError("Unable to query client from InvoiceNinja server:\n" . $ex->getMessage()); } } } public static function exists($id, $local = true): bool { global $database, $SETTINGS; if ($local) { return $database->has('clients', ['clientid' => $id]); } try { $client = NinjaClient::find($id); return true; } catch (Exception $ex) { if ($ex->getMessage() == "{\n \"message\": \"record does not exist\"\n}") { return false; } if ($SETTINGS['debug']) { echo $ex->getTraceAsString(); } sendError("Unable to query client ID from InvoiceNinja server:\n" . $ex->getMessage()); } } /** * Save the client. */ public function save() { global $database; if ($this->isLocal()) { $data = [ "name" => $this->getName(), "phone" => $this->getPhone(), "email" => $this->getEmail(), "billingaddress" => $this->getBillingAddress(), "mailingaddress" => $this->getMailingAddress(), "publicnotes" => $this->getPublicNotes(), "privatenotes" => $this->getPrivateNotes() ]; if (!empty($this->id) && $database->has("clients", ["clientid" => $this->id])) { $database->update("clients", $data, ["clientid" => $this->id]); } else { $database->insert("clients", $data); $this->id = $database->id(); } return; } if ($this->exists) { $client = NinjaClient::find($id); $client->name = $this->getName(); } else { $client = new NinjaClient($this->getEmail(), '', '', $this->getName()); } $client->work_phone = $this->getPhone(); $client->public_notes = $this->getPublicNotes(); $client->private_notes = $this->getPrivateNotes(); $client->save(); } public function isLocal(): bool { return $this->local; } public function getID() { return $this->id; } public function getName(): string { if (empty($this->name)) { $this->fullerize(); } return $this->name; } public function getPhone(): string { $this->fullerize(); return $this->phone; } public function getEmail(): string { $this->fullerize(); return $this->email; } public function getBillingAddress(): string { $this->fullerize(); return $this->billingaddress; } public function getMailingAddress(): string { $this->fullerize(); return $this->mailingaddress; } public function getPublicNotes(): string { $this->fullerize(); return $this->publicnotes; } public function getPrivateNotes(): string { $this->fullerize(); return $this->privatenotes; } public function setName(string $name) { $this->fullerize(); $this->name = $name; } public function setPhone(string $phone) { $this->fullerize(); $this->phone = $phone; } public function setEmail(string $email) { $this->fullerize(); $this->email = $email; } public function setBillingAddress(string $address) { $this->fullerize(); $this->billingaddress = $address; } public function setMailingAddress(string $address) { $this->fullerize(); $this->mailingaddress = $address; } public function setPublicNotes(string $notes) { $this->fullerize(); $this->publicnotes = $notes; } public function setPrivateNotes(string $notes) { $this->fullerize(); $this->privatenotes = $notes; } }