Question

Nous venons récemment opté pour Magento et elle fonctionne très bien.Comme nous arrivons à la fin de la période imposable, cependant, j'ai du mal à comprendre comment générer les rapports nécessaires.Plus précisément, la CE liste de ventes.

Nous avons besoin d'un rapport qui répertorie la TVA Id de l'UE clients B2B et de leurs dépenses totales au cours de la période.Je ne vois pas moyen de le faire dans Magento, et une recherche sur Google vient avec absolument rien sur le sujet.

Il doit y avoir beaucoup de royaume-UNI à base de Magento systèmes exécutant régulièrement besoin pour générer cette information, de sorte qu'il doit être possible.Une idée de comment je le faire?

Était-ce utile?

La solution 2

En fin de compte, j'ai écrit ma propre extension.Je n'avais pas fait tout (non trivial) de développement de Magento avant, j'ai donc pensé que c'était un bon endroit pour commencer que tout.

(TL,DR:C'est sur github)

Comme toujours, une fois que vous creusez un peu plus profond dans les exigences, il y a un peu plus à elle qu'à sa première apparition.La TVA est facturée (ou non débitée) selon l'adresse de livraison, j'ai donc besoin de vérifier la validité de l'identification à la TVA là, plutôt que dans le modèle client.Donc, c'est ce que j'ai fait.

D'abord, je reçois toutes les factures à l'aide d'une jointure sur l'adresse d'expédition de la table où je l'ai vérifier la facture date de création et de vérifier que la vat_is_valid le drapeau est réglé et que le vat_id n'est pas nulle.

$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)
    ;

Maintenant, que la requête utilise la date de la facture.Apparemment, selon l'administration fiscale et douanière, la CE de vente doivent être inclus basé sur la date de commande, et non pas la date de paiement (même si vous êtes en utilisant la comptabilité de caisse).Presque toutes nos ventes d'utiliser Paypal Express afin de la date de commande et la date de la facture sont les mêmes, donc ce n'est pas un problème immédiat, mais est quelque chose que je devrait résoudre le problème lorsque j'ai la chance.

Ensuite, j'ai besoin de prendre en compte les notes de crédit émises dans la même période.Notez qu'une note de crédit peut être délivré dans une autre période fiscale de la facture qui est crédité.

$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)
;

Enfin, je additionnez tous les montants de la facture pour chaque numéro de TVA, déduire toutes les notes de crédit pour que le numéro de TVA et ensuite afficher le résultat.

Je suis assez sûr que tout fonctionne comme il se doit.Je suppose que je vais trouver assez vite que notre déclaration de TVA doit aller ce mois-ci :-)

Actuellement, cette liste est générée à partir de la ligne de commande.Ensuite, je vais être à la recherche à la façon de construire un bon Magento rapport de sorte qu'il peut être facilement généré à partir du backend de Magento.

Le code complet est disponible sur github.

Autres conseils

Je mets le code ci-dessous dans un module pouvant aider comme bloc de départ pour obtenir les données dont vous avez besoin.

Le module ajoutera un nouvel élément de menu Sales-> Ventes client par TVA ID.Les chaînes de date sont configurées dans App / Code / Community / Paj / Communérosales / Helper / Data.PHP

Téléchargez le module ici

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

Ce sont les fonctions utilisées dans le module

Cela obtiendra votre collection de clients

    public function getCustomerByVATID($_storeID=0)
{

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

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



    return $_result

}

Et cela obtiendra la vente totale par date

    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);

}

Ensuite, vous exportez les données comme celle-ci avec la plage de date que vous souhaitez

    $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";
            }

        }
    }

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top