Current File : /var/www/vinorea/modules/ipexportimport/classes/import/order/EIAOrderCarrier.php
<?php
/**
 *
 * NOTICE OF LICENSE
 *
 *  @author    SmartPresta <tehran.alishov@gmail.com>
 *  @copyright 2024 SmartPresta
 *  @license   Commercial License
 */

if (!defined('_PS_VERSION_')) {
    exit;
}

class EIAOrderCarrier
{

    public $id_order;
    public $invoiceObj;
    public $id_carrier;
    public $baseOrderData;
    public $weight;
    public $tracking_number;
    public $shipping_cost_tax_excl;
    public $shipping_cost_tax_incl;
    public $id_order_invoice;
    public $date_add;
    public $row;
    public $id_process;
    public $validateOnly; 

    public function __construct($id_order = null, $baseOrderData = null, $row = null, $id_process = null, $validateOnly = false, $invoiceObj = null)
    {
        $this->id_order = (int) $id_order;
        $this->invoiceObj = $invoiceObj;
        $this->baseOrderData = $baseOrderData;
        $this->row = $row;
        $this->id_process = $id_process;
        $this->validateOnly = $validateOnly;
    }

    public function save()
    {
        $carriers = $this->getOrderCarriers();
        if (!$carriers) {
            if (!empty($this->baseOrderData['ids_carrier'])) {
                $data = $this->baseOrderData['ids_carrier'];
            } elseif (!empty($this->baseOrderData['ids_reference'])) {
                $data = $this->baseOrderData['ids_reference'];
            } elseif (!empty($this->baseOrderData['carrier_names'])) {
                $data = $this->baseOrderData['carrier_names'];
            } else {
                return false;
            }
            
            foreach ($data as $key => $val) {
                $this->setDataObject($key);
            }
        } else {
            foreach ($carriers as $key => $carrier) {
                $this->setDataObject($key, $carrier->id);
            }
        }
    }
    
    private function setDataObject($key, $id_order_carrier = null)
    {
        if (!$id_order_carrier && !empty($this->baseOrderData['ids_order_carrier'][$key])) {
            $id_order_carrier = (int) $this->baseOrderData['ids_order_carrier'][$key];
        }
        
        $obj = new OrderCarrier($id_order_carrier);
        $this->getObjectVariables($this->baseOrderData, $obj, $key);
        $obj->id_order = $this->id_order;
        $obj->id_carrier = $this->id_carrier;
        $obj->id_order_invoice = $this->id_order_invoice;
        $obj->shipping_cost_tax_excl = $this->shipping_cost_tax_excl;
        $obj->shipping_cost_tax_incl = $this->shipping_cost_tax_incl;
        $obj->tracking_number = $this->tracking_number;
        $obj->weight = $this->weight;
        $obj->date_add = $this->date_add;

        if (($error = $obj->validateFields(false, true)) !== true) {
            throw new PrestaShopException("Error: $error. ID: $this->id_order. Row in file: $this->row.");
        }

        $this->validateOnly || $obj->save();
    }

    private function getObjectVariables($data, $obj, $key)
    {
        if (isset($data['ids_carrier'][$key])) {
            $this->id_carrier = $data['ids_carrier'][$key] ? $data['ids_carrier'][$key] : 0;
        } elseif (!empty($data['carrier_names'][$key])) {
            $this->id_carrier = EIAOrdersImport::getCarrierIdByName($data['carrier_names'][$key]);
        } elseif (!empty($data['ids_reference'][$key])) {
            $this->id_carrier = EIAOrdersImport::getCarrierIdByReference($data['ids_reference'][$key]);
        } else {
            $this->id_carrier = $obj->id_carrier;
        }

        if (isset($data['id_order_invoice'][$key])) {
            $this->id_order_invoice = $data['id_order_invoice'][$key] ? $data['id_order_invoice'][$key] : 0;
        } else {
            $this->id_order_invoice = $obj->id_order_invoice;
        }

        if (isset($data['total_shipping_tax_incl'][$key])) {
            $this->shipping_cost_tax_incl = $data['total_shipping_tax_incl'][$key] ? EIATools::preparePrice($data['total_shipping_tax_incl'][$key]) : 0;
        } else {
            $this->shipping_cost_tax_incl = $obj->shipping_cost_tax_incl;
        }
        
        if (isset($data['total_shipping_tax_excl'][$key])) {
            $this->shipping_cost_tax_excl = $data['total_shipping_tax_excl'][$key] ? EIATools::preparePrice($data['total_shipping_tax_excl'][$key]) : 0;
        } else {
            $this->shipping_cost_tax_excl = $obj->shipping_cost_tax_excl;
        }
        
        if (isset($data['carrier_tracking_number'][$key])) {
            $this->tracking_number = $data['carrier_tracking_number'][$key] ? $data['carrier_tracking_number'][$key] : '';
        } else {
            $this->tracking_number = $obj->tracking_number;
        }
        
        if (isset($data['carrier_weight'][$key])) {
            $this->weight = $data['carrier_weight'][$key] ? $data['carrier_weight'][$key] : 0;
        } else {
            $this->weight = $obj->weight;
        }
        
        if (isset($data['carrier_date_add'][$key])) {
            $this->date_add = $data['carrier_date_add'][$key] ? $data['carrier_date_add'][$key] : date('Y-m-d H:i:s');
        } else {
            $this->date_add = $obj->date_add;
        }
    }

    private function getOrderCarriers()
    {
        $sql = "
            SELECT *
            FROM " . _DB_PREFIX_ . "order_carrier as o
            WHERE o.id_order = " . (int) $this->id_order;
        
        return ObjectModel::hydrateCollection('OrderCarrier', Db::getInstance()->executeS($sql));
    }

}