HEX
Server: Apache
System: Linux srv13.cpanelhost.cl 3.10.0-962.3.2.lve1.5.38.el7.x86_64 #1 SMP Thu Jun 18 05:28:41 EDT 2020 x86_64
User: cca63905 (4205)
PHP: 7.3.20
Disabled: NONE
Upload Files
File: //proc/self/root/proc/self/cwd/nueva/modules/ps_metrics/src/Repository/OrderRepository.php
<?php

/**
 * Copyright since 2007 PrestaShop SA and Contributors
 * PrestaShop is an International Registered Trademark & Property of PrestaShop SA
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License version 3.0
 * that is bundled with this package in the file LICENSE.md.
 * It is also available through the world-wide-web at this URL:
 * https://opensource.org/licenses/AFL-3.0
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@prestashop.com so we can send you a copy immediately.
 *
 * @author    PrestaShop SA and Contributors <contact@prestashop.com>
 * @copyright Since 2007 PrestaShop SA and Contributors
 * @license   https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0
 */

namespace PrestaShop\Module\Ps_metrics\Repository;

use PrestaShop\Module\Ps_metrics\Helper\DbHelper;
use PrestaShop\Module\Ps_metrics\Helper\ShopHelper;

class OrderRepository
{
    /**
     * @var DbHelper
     */
    private $dbHelper;

    /**
     * @var ShopHelper
     */
    private $shopHelper;

    /**
     * __construct
     *
     * @param DbHelper $dbHelper
     * @param ShopHelper $shopHelper
     */
    public function __construct(DbHelper $dbHelper, ShopHelper $shopHelper)
    {
        $this->dbHelper = $dbHelper;
        $this->shopHelper = $shopHelper;
    }

    /**
     * Get CA for the shop for de order paid since last 3 months for billing plan
     *
     * @return int
     */
    public function getCaForPlans()
    {
        $firstOrderDate = $this->getFirstOrderDate();

        if (empty($firstOrderDate)) {
            return 0;
        }
        $begin = new \DateTime($firstOrderDate);
        $end = new \DateTime();
        $interval = date_diff($begin, $end);

        $intervalMonth = $interval->m + $interval->y * 12;
        $months = $intervalMonth > 3 ? 3 : $intervalMonth;
        $months = $months == 0 ? 1 : $months;

        $date = date('Y-m-d', (int) strtotime('-' . $months . 'months'));

        $amount = $this->dbHelper->getValue(
            'SELECT SUM((od.unit_price_tax_incl / o.conversion_rate) * od.product_quantity) as revenues
            FROM ' .
                _DB_PREFIX_ .
                'order_detail od
            INNER JOIN ' .
                _DB_PREFIX_ .
                'orders o ON (od.id_order = o.id_order)
            INNER JOIN ' .
                _DB_PREFIX_ .
                'order_state os ON (o.current_state = os.id_order_state)
            WHERE
                o.date_add >= "' .
                pSQL($date) .
                '"
                AND os.logable = 1
                ' .
                $this->shopHelper->addSqlRestriction(false, 'o') .
                '
            ORDER BY o.date_add ASC'
        );

        return (int) $amount / $months;
    }

    /**
     * Get first order date
     *
     * @return string
     */
    private function getFirstOrderDate()
    {
        $result = $this->dbHelper->getValue(
            'SELECT date_add
            FROM ' .
                _DB_PREFIX_ .
                'orders o
            INNER JOIN ' .
                _DB_PREFIX_ .
                'order_state os ON (o.current_state = os.id_order_state)
            WHERE os.logable = 1
                ' .
                $this->shopHelper->addSqlRestriction(false, 'o') .
                '
            ORDER BY date_add DESC'
        );

        return (string) $result;
    }
}