Pregunta

Recientemente nos cambiamos a Magento y ha funcionado muy bien.Sin embargo, a medida que llegamos al final del período del IVA, me cuesta descubrir cómo generar los informes necesarios.En concreto, la lista de ventas de la CE.

Necesitamos un informe que enumere los números de identificación fiscal de los clientes B2B de la UE y su gasto total durante el período.No veo ninguna manera de hacer esto en Magento, y una búsqueda en Google no arroja absolutamente nada sobre el tema.

Debe haber muchos sistemas Magento en funcionamiento en el Reino Unido que necesiten generar esta información de forma rutinaria, por lo que debe ser posible.¿Alguna idea de cómo hago esto?

¿Fue útil?

Solución 2

Al final, escribí mi propia extensión.No había realizado ningún desarrollo de Magento (no trivial) antes, así que pensé que este era un buen lugar para comenzar como cualquier otro.

(TL,DR:Esta encendido github)

Como siempre, una vez que profundizas un poco más en los requisitos, hay un poco más que a primera vista.El IVA se cobra (o no se cobra) según la dirección de envío, por lo que debo verificar si hay un ID de IVA válido allí, en lugar de en el modelo del cliente.Entonces, esto es lo que hice.

Primero, obtengo todas las facturas usando una combinación en la tabla de direcciones de envío donde verifico la fecha de creación de la factura y compruebo que vat_is_valid bandera está establecida y que el vat_id No es nulo.

$from = $this->getFrom()->format('Y-m-d');
$to = $this->getTo()->add(new \DateInterval('P1D'))->format('Y-m-d');

/** @var Mage_Sales_Model_Resource_Order_Invoice_Collection $invoices */
$invoices = \Mage::getModel("sales/order_invoice")
    ->getCollection()
    ->join(array(
        'shipping_address'=> 'order_address'),
        'shipping_address.entity_id = main_table.shipping_address_id',
        array('shipping_address.vat_id', 'shipping_address.vat_is_valid'))
    ->addAttributeToFilter('created_at', array('gteq' => $from))
    ->addAttributeToFilter('created_at', array('lt' => $to))
    ->addAttributeToFilter('shipping_address.vat_id', array('notnull' => true))
    ->addAttributeToFilter('shipping_address.vat_is_valid', 1)
    ;

Ahora, esa consulta utiliza la fecha de la factura.Aparentemente, según HMRC, las ventas EC deben incluirse en función de la fecha del pedido, no de la fecha de pago (incluso si se utiliza la contabilidad de caja).Casi todas nuestras ventas utilizan Paypal Express, por lo que la fecha del pedido y la fecha de la factura son las mismas, por lo que no es un problema inmediato, pero es algo que debo solucionar cuando tenga la oportunidad.

A continuación, debo tener en cuenta los abonos emitidos en el mismo período.Tenga en cuenta que una nota de crédito puede emitirse en un período impositivo diferente al de la factura que se está acreditando.

$from = $this->getFrom()->format('Y-m-d');
$to = $this->getTo()->add(new \DateInterval('P1D'))->format('Y-m-d');

/** @var Mage_Sales_Model_Resource_Order_Creditmemo_Collection $creditMemos */
$creditMemos = \Mage::getModel("sales/order_creditmemo")
    ->getCollection()
    ->join(array(
        'shipping_address'=> 'order_address'),
        'shipping_address.entity_id = main_table.shipping_address_id',
        array('shipping_address.vat_id', 'shipping_address.vat_is_valid'))
    ->addAttributeToFilter('created_at', array('gteq' => $from))
    ->addAttributeToFilter('created_at', array('lt' => $to))
    ->addAttributeToFilter('shipping_address.vat_id', array('notnull' => true))
    ->addAttributeToFilter('shipping_address.vat_is_valid', 1)
;

Finalmente, sumo todos los montos de las facturas para cada ID de IVA, deduzco todas las notas de crédito para ese ID de IVA y luego obtengo el resultado.

Estoy bastante seguro de que todo funciona como debería.Supongo que lo descubriré pronto, ya que nuestra declaración del IVA debe enviarse este mes :-)

Actualmente, esta lista se genera desde la línea de comando.A continuación, veremos cómo crear un informe de Magento adecuado para que pueda generarse fácilmente desde el backend de Magento.

El código completo está disponible en github.

Otros consejos

Puse el código a continuación en un módulo que podría ayudarlo como un bloque de inicio para obtener los datos que necesita.

El módulo agregará un nuevo elemento de menú ventas-> Ventas de clientes por ID de IVA.Los rangos de fecha están configurados en la aplicación / código / Community / PAJ / CustomersAse / Helper / Data.php

Descargar el módulo aquí

https://github.com/gaiterjones/magento-customersales/

Estas son las funciones utilizadas en el módulo

Esto obtendrá su colección de clientes

    public function getCustomerByVATID($_storeID=0)
{

    $_collection = \Mage::getModel('customer/customer')
            ->getCollection()
            ->addAttributeToSelect('taxvat');

    $_result = array();
    foreach ($_collection as $_customer) {
        $_result[] = $_customer->toArray();
    }



    return $_result

}

y esto obtendrá las ventas totales por fecha

    public function getCustomerSales($_customerId,$fromDate,$toDate)
{


    $fromDate = date('Y-m-d H:i:s', strtotime($fromDate));
    $toDate = date('Y-m-d H:i:s', strtotime($toDate));

    $orderCollection = \Mage::getModel('sales/order')->getCollection()
        ->addFilter('customer_id', $_customerId)
        ->addAttributeToFilter('created_at', array('from'=>$fromDate, 'to'=>$toDate))
        ->setOrder('created_at', \Varien_Data_Collection_Db::SORT_ORDER_DESC)
    ;
    $numberOfOrders = $orderCollection->count();
    $newestOrder = $orderCollection->getFirstItem();

    $orderCollection->clear()->getSelect()
        ->columns(array('total_sales'=>'SUM(main_table.base_grand_total)'))
        ->group('customer_id')
    ;
    $totalSales = $orderCollection->getFirstItem()
        ->getData('total_sales');       

    return array('customersales' => $totalSales);

}

Luego, exporta los datos como este con el rango de fecha que desea

    $fromDate='2015-01-01';
    $toDate='2015-02-01';

    foreach ($_collection as $_customer)
    {
        if (strlen($_customer['taxvat']) > 2)
        {

            $_sales=$_obj->getCustomerSales($_customer['entity_id'],$fromDate,$toDate);

            if($_sales['customersales'] > 0)
            {
                echo 'id ->'. $_customer['entity_id']. ' - '. $_customer['taxvat']. ' sales= '. $_sales['customersales']. "\n";
            }

        }
    }

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top