Files
b2b.redline.com.pl/modules/newsletterpro/classes/NewsletterProMailChimpOrder.php
2025-06-24 14:14:35 +02:00

288 lines
7.4 KiB
PHP

<?php
/**
* Since 2013 Ovidiu Cimpean.
*
* Ovidiu Cimpean - Newsletter Pro © All rights reserved.
*
* DISCLAIMER
*
* Do not edit, modify or copy this file.
* If you wish to customize it, contact us at addons4prestashop@gmail.com.
*
* @author Ovidiu Cimpean <addons4prestashop@gmail.com>
* @copyright Since 2013 Ovidiu Cimpean
* @license Do not edit, modify or copy this file
*
* @version Release: 4
*/
class NewsletterProMailChimpOrder
{
/**
* the Order Id.
*
* @var string
*/
private $id;
/**
* NOT IN USE
* optional the Campaign Id to track this order against (see the "mc_cid" query string variable a campaign passes).
*
* @var string
*/
private $campaign_id;
/**
* NOT IS USE
* optional (kind of) the Email Id of the subscriber we should attach this order to (see the "mc_eid" query string variable a campaign passes) - required if campaign_id is passed, otherwise either this or email is required. If both are provided, email_id takes precedence.
*
* @var string
*/
private $email_id;
/**
* optional (kind of) the Email Address we should attach this order to - either this or email_id is required. If both are provided, email_id takes precedence.
*
* @var string
*/
private $email;
/**
* The Order Total (ie, the full amount the customer ends up paying).
*
* @var float
*/
private $total;
/**
* optional the date of the order - if this is not provided, we will default the date to now. Should be in the format of 2012-12-30.
*
* @var string
*/
private $order_date;
/**
* optional the total paid for Shipping Fees.
*
* @var float
*/
private $shipping;
/**
* optional the total tax paid.
*
* @var float
*/
private $tax;
/**
* a unique id for the store sending the order in (32 bytes max).
*
* @var string
*/
private $store_id;
/**
* optional a "nice" name for the store - typically the base web address (ie, "store.mailchimp.com"). We will automatically update this if it changes (based on store_id).
*
* @var string
*/
private $store_name;
/**
* structs for each individual line item including.
*
* @var array
*/
private $items = [];
private $db_cache = [];
public function __construct($id_order, $id_currency = null)
{
$order = new Order($id_order);
$id_currency = $to_currency = (isset($id_currency) ? $id_currency : pqnp_config('PS_CURRENCY_DEFAULT'));
$from_currency = $order->id_currency;
$tax_excl = PS_TAX_EXC == $order->getTaxCalculationMethod();
$customer = new Customer($order->id_customer);
$shop = new Shop($order->id_shop);
$line_num = 0;
foreach ($order->getProducts() as $product) {
$id_category_default = $product['id_category_default'];
if ($tax_excl) {
$cost = $product['unit_price_tax_excl'];
} else {
$cost = $product['unit_price_tax_incl'];
}
$item = [
'line_num' => ++$line_num,
'product_id' => (int) $product['product_id'],
'sku' => (string) $product['product_reference'],
'product_name' => (string) $product['product_name'],
'category_id' => (int) $id_category_default,
'category_name' => $this->getCategoryName($id_category_default, $order->id_lang),
'qty' => (float) $product['product_quantity'],
'cost' => (float) $cost,
];
$this->addItem($item);
}
if ($tax_excl) {
$total = $order->total_paid_tax_excl;
$shipping = $order->total_shipping_tax_excl;
} else {
$total = $order->total_paid_tax_incl;
$shipping = $order->total_shipping_tax_incl;
}
$tax = $order->total_paid_tax_incl - $order->total_paid_tax_excl;
$this->setId($order->id);
$this->setEmail($customer->email);
$this->setTotal($total, $from_currency, $to_currency);
$this->setOrderDate($order->date_add);
$this->setShipping($shipping, $from_currency, $to_currency);
$this->setTax($tax, $from_currency, $to_currency);
$this->setStoreId($shop->id);
$this->setStoreName($shop->name);
}
public static function newInstance($id_order, $id_currency = null)
{
return new self($id_order, $id_currency);
}
public static function getOrdersIdSinceDate($date)
{
$db_orders = Db::getInstance()->executeS('
SELECT `id_order`, `date_add`
FROM `'._DB_PREFIX_.'orders`
WHERE `date_add` > "'.pSQL($date).'"
');
return $db_orders;
}
public function toArray()
{
$order = [
'id' => $this->id,
'email' => $this->email,
'total' => $this->total,
'order_date' => $this->order_date,
'shipping' => $this->shipping,
'tax' => $this->tax,
'store_id' => $this->store_id,
'store_name' => $this->store_name,
'items' => $this->getValidItems(),
];
return $order;
}
private function getCategoryName($id_category, $id_lang = null)
{
$id_lang = (isset($id_lang) ? $id_lang : pqnp_config('PS_LANG_DEFAULT'));
$sql = trim('
SELECT `name` FROM `'._DB_PREFIX_.'category` c
LEFT JOIN `'._DB_PREFIX_.'category_lang` cl
ON (c.`id_category` = cl.`id_category`)
WHERE c.`id_category` = '.(int) $id_category.'
AND cl.`id_lang` = '.(int) $id_lang.'
');
if (isset($this->db_cache[$sql])) {
return $this->db_cache[$sql];
}
$name = trim(Db::getInstance()->getValue($sql));
$this->db_cache[$sql] = (empty($name) ? 'Unknown' : $name);
return $this->db_cache[$sql];
}
public function setId($value)
{
$this->id = (int) $value;
return $this;
}
public function setEmail($value)
{
$this->email = (string) $value;
return $this;
}
public function setTotal($value, $from_currency = null, $to_currency = null)
{
$this->total = (float) Tools::convertPrice($value, $from_currency, $to_currency);
return $this;
}
public function setOrderDate($value)
{
$this->order_date = (string) $value;
return $this;
}
public function setShipping($value, $from_currency = null, $to_currency = null)
{
$this->shipping = (float) Tools::convertPrice($value, $from_currency, $to_currency);
return $this;
}
public function setTax($value, $from_currency, $to_currency)
{
$this->tax = (float) (float) Tools::convertPrice($value, $from_currency, $to_currency);
return $this;
}
public function setStoreId($value)
{
$this->store_id = (string) $value;
return $this;
}
public function setStoreName($value)
{
$this->store_name = (string) $value;
return $this;
}
public function addItem($value)
{
$this->items[] = $value;
return $this;
}
public function getValidItems()
{
$items = [];
foreach ($this->items as $item) {
if ((int) $item['product_id'] && (int) $item['category_id']) {
$items[] = $item;
}
}
return $items;
}
}