ccc

Prestashop: Obtener carritos abandonados

Carritos abandonados con algo ya comprado:
// ****************************************************
    public static function getIdsCarritosAbandonadosFull($dias) {
        $listIds = "";
        $sql = "SELECT distinct c.id_cart FROM ps_cart c join ps_cart_product cp on c.id_cart=cp.id_cart where c.date_add BETWEEN (date_sub(NOW(), INTERVAL ".$dias." DAY)) AND NOW()";
        if ($results = Db::getInstance()->ExecuteS($sql)) {
            foreach ($results as $row) {
            $listIds .= $row['id_cart'].",";
            }
        }
        $listIds = substr($listIds, 0, -1); // quitar última coma
        return $listIds;
    }

Carritos abandonados sin nada comprado:
// ****************************************************
    public static function getIdsCarritosAbandonadosEmpty($dias) {
        $listIds = "";
     
         $sql = "SELECT distinct * FROM ps_cart
          where id_cart not in (select id_cart from ps_cart_product where date_add BETWEEN (date_sub(NOW(), INTERVAL 90 DAY)) AND NOW())
          and date_add BETWEEN (date_sub(NOW(), INTERVAL 90 DAY)) AND NOW()";
        if ($results = Db::getInstance()->ExecuteS($sql)) {
            foreach ($results as $row) {
            $listIds .= $row['id_cart'].",";
            }
        }
        $listIds = substr($listIds, 0, -1); // quitar última coma
        return $listIds;
    }

Se llamaría por ejemplo desde AdminCarritosController.php:
$listIds = Cart::getIdsCarritosAbandonadosFull($dias);
// $listIds = Cart::getIdsCarritosAbandonadosEmpty($dias);
...
$this->_select =
        'CONCAT(LEFT(c.`firstname`, 1), \'. \', c.`lastname`) `customer`, a.id_cart total, ca.name carrier,
        IF (IFNULL(o.id_order, \''.$this->l('Non ordered').'\') = \''.$this->l('Non ordered').'\',
        IF(TIME_TO_SEC(TIMEDIFF(\''.pSQL(date('Y-m-d H:i:00', time())).'\', a.`date_add`)) > 86400, \''.$this->l('Abandoned cart').'\', \''.$this->l('Non ordered').'\'), o.id_order) AS status, 
        IF(o.id_order, 1, 0) badge_success,
        IF(o.id_order, 0, 1) badge_danger,
        IF(co.id_guest, 1, 0) id_guest';

        $this->_join = 'LEFT JOIN '._DB_PREFIX_.'customer c ON (c.id_customer = a.id_customer)
        LEFT JOIN '._DB_PREFIX_.'carrier ca ON (ca.id_carrier = a.id_carrier)
        LEFT JOIN '._DB_PREFIX_.'orders o ON (o.id_cart = a.id_cart)
        LEFT JOIN `'._DB_PREFIX_.'connections` co ON (a.id_guest = co.id_guest AND TIME_TO_SEC(TIMEDIFF(\''.pSQL(date('Y-m-d H:i:00', time())).'\', co.`date_add`)) < 1800)';


        $this->_where = ' AND c.lastname != "--" AND o.id_order is null and a.id_cart in ('.$listIds.')';

No hay comentarios:

Publicar un comentario