Una información muy interesante para el equipo directivo de una empresa, puede ser simplemente el saber qué clientes son los más activos. Quizá queremos calcular un promedio de pedidos por cliente, cuántos intentos de pedido ha habido sin llegar a éxito, terminados en cancelación o no. Quizá sólo hacen un pedido y no vuelven más a la web. O quizá no suelen hacer ni un pedido, pero los que hacen pedidos suelen repetir…
Esta información, y mucha más, es información necesaria para lo llamado como: Inteligencia de Negocio. Esta información, muchas veces no es suficiente con los reportes del panel del control, pero es bastante sencillo de sacar a partir de scripts en PHP.
En el panel de control de Magento, podemos ir a la sección de Informes > Clientes > Clientes por total de pedidos, o a Informes > Clientes > Clientes por número de pedidos y veremos listados exportables como el siguiente:
Los subreportes en Magento de casa están limitados a 5, por esto que sólo verás 5 resultados por día o por mes. Lo que no veo, por ejemplo, es que no salen los clientes con 0 pedidos, tampoco tengo emails ni teléfonos para arrancar acciones comerciales. Esto es un problema, porque aunque puedo ver cierta información, y la puedo exportar a CSV, no tengo casi información reutilizable.
Así que aquí abajo dejo el script que saca el 100% de los resultados. Editarlo para añadir la información de los clientes y sus pedidos no es complicado.
Listando clientes
Vamos con el simple caso de sacar un listado de los clientes y su número de pedidos. Primero que todo necesitaremos los clientes, vamos a sacar sólo los creados este año:
$customers = Mage::getModel('customer/customer')->getCollection()
->addFieldToFilter('created_at', array(
'from' => '2018-01-01 00:00:00',
));
Dentro de $customers tendremos un array de clientes. Luego vamos a necesitar los pedidos para cada uno de ellos.
Listando pedidos
Así tenemos los pedidos de un sólo cliente desde una fecha:
$orderCollection = Mage::getResourceModel('sales/order_collection')
->addFieldToFilter('customer_id', $customerId)
->addFieldToFilter('created_at', array(
'from' => '2018-01-01 00:00:00',
))
->setOrder('created_at', 'desc');
..donde $customerId es el identificador del cliente dentro de Magento.
Todo junto
Juntando todo en un sólo script nos puede quedar algo así:
<?php
require_once __DIR__.'/app/Mage.php';
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$customers = Mage::getModel('customer/customer')->getCollection()
->addFieldToFilter('created_at', array(
'from' => '2018-01-01 00:00:00',
));
echo 'ID,TAXVAT,EMAIL,NOMBRE,APELLIDOS,PEDIDOS'.PHP_EOL;
foreach ($customers as $customer) {
$customer = Mage::getModel('customer/customer')->load($customer->getId());
echo $customer->getId().','
.trim($customer->getTaxvat()).','
.trim($customer->getEmail()).',"'
.trim($customer->getFirstname()).'","'
.trim($customer->getLastname()).'",';
$orderCollection = Mage::getResourceModel('sales/order_collection')
->addFieldToFilter('customer_id', $customer->getId())
->addFieldToFilter('created_at', array(
'from' => '2018-01-01 00:00:00',
))
->setOrder('created_at', 'desc');
echo $orderCollection->count();
echo PHP_EOL;
}
Este script lo podemos meter dentro de un fichero .php, por ejemplo llamado customersAndOrders.php, y lo ponemos en el directorio raíz del proyecto. Ahora lo ejecutamos desde línea de comandos:
$ php customersAndOrders.php
Y deberemos de ver un listado de estos clientes en formato .csv
ID,TAXVAT,EMAIL,NOMBRE,APELLIDOS,PEDIDOS
76022,1231321E,afasf.asfafsaf@gdfgfdg.com,"Nombre1","Apellidos1",1
76023,,asdasd@dfgdfg.com,"Nombre2","Apellidos2",3
76025,54566654F,sadsadasd@dfgdfg.com,"Nombre3","Apellidos3",1
Que de igual manera podemos guardarlo a un fichero .csv para luego estudiarlo en LibreOffice o similar como un Excel, así:
$ php customersAndOrders.php > customersAndOrders.csv
¿Sencilllo verdad? Espero que sirva.
Un saludo.