* @copyright 2021 DIGITAL RETAIL TECHNOLOGIES SL * @license https://opensource.org/licenses/MIT The MIT License * * Don't forget to prefix your containers with your own identifier * to avoid any conflicts with others containers. */ class RetailcrmCustomerSwitcherResult { /** @var \Customer */ private $customer; /** @var \Address */ private $address; /** @var \Order */ private $order; /** * RetailcrmCustomerSwitcherResult constructor. * * @param \Customer $customer * @param \Address $address * @param \Order $order */ public function __construct($customer, $address, $order) { $this->customer = $customer; $this->order = $order; $this->address = $address; if (!($this->customer instanceof Customer) || !($this->order instanceof Order)) { throw new \InvalidArgumentException(sprintf('Incorrect data provided to %s', __CLASS__)); } } /** * @return \Customer */ public function getCustomer() { return $this->customer; } /** * @return \Address */ public function getAddress() { return $this->address; } /** * @param \Address $address * * @return RetailcrmCustomerSwitcherResult */ public function setAddress($address) { $this->address = $address; return $this; } /** * @return \Order */ public function getOrder() { return $this->order; } /** * Save customer (if exists) and order. * * @return $this * * @throws \PrestaShopException */ public function save() { RetailcrmLogger::writeDebugArray( __METHOD__, [ 'Saving customer, address and order:', [ 'customer' => RetailcrmTools::dumpEntity($this->customer), 'address' => RetailcrmTools::dumpEntity($this->address), 'order' => RetailcrmTools::dumpEntity($this->order), ], ] ); if (!empty($this->customer)) { $this->customer->save(); if (!empty($this->address) && !empty($this->customer->id)) { $this->address->id_customer = $this->customer->id; $this->address->save(); if (!empty($this->order) && !empty($this->address->id)) { $this->order->id_customer = $this->customer->id; $this->order->id_address_invoice = $this->address->id; $this->order->id_address_delivery = $this->address->id; $this->order->save(); } else { $this->address->delete(); } } } return $this; } }