Генерация Список продаж EC для возврата Великобритании НДС

magento.stackexchange https://magento.stackexchange.com//questions/85062

  •  13-12-2019
  •  | 
  •  

Вопрос

Мы только недавно переключились на Magento, и он очень хорошо работает.Однако, поскольку мы достигаем конца периода НДС, однако я борюсь, чтобы выяснить, как создать необходимые отчеты.В частности, список продаж EC.

Нам нужен отчет, который перечислены идентификаторы НДС клиентов EU B2B и их общее проведение в течение периода.Я не вижу никакого способа сделать это в Magento, и поиск Google приводится в себе абсолютно ничего по этому вопросу.

Там должно быть много британских систем Magento, которые регулярно нужно создать эту информацию, поэтому она должна быть возможна.Любая идея, как я это делаю?

Это было полезно?

Решение 2

В конце концов я написал свое собственное расширение. Я бы не сделал никакого (нетривиального) Magento Development раньше, поэтому я полагал, что это было так же хорошее место, чтобы начать как нибудь.

(Tl, DR: это на github )

Как никогда, после того, как вы немного глубже в требованиях, к нему немного больше, чем на первый вид. НДС заряжена (или не заряжена) на основе адреса доставки, поэтому мне нужно проверить действительный идентификатор НДС, а не в модели клиента. Итак, это то, что я сделал.

Во-первых, я получаю все счета, используя присоединение к таблице адресов доставки, где я проверяю дату создания счета и убедитесь, что флаг vat_is_valid устанавливается и что vat_id не является нулевым.

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

Теперь, что запрос использует дату счета. По-видимому, согласно HMRC, продажи EC должны быть включены на основании даты заказа, а не дата платежа (даже если вы используете наличный бухгалтерский учет). Почти все наши продажи используют PayPal Express, чтобы дата заказа и счета-фактуры одинаковы, так что это не немедленная проблема, но это то, что я должен исправить, когда у меня есть шанс.

Далее мне нужно учитывать кредитные заметки, выданные за тот же период. Обратите внимание, что кредитная записка может быть выдана в другом налоговом периоде к счету, которое зачисляется.

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

Наконец, добавляю все суммы счета для каждого идентификатора НДС, вычтете все кредитовые памятки для этого идентификатора НДС, а затем выводить результат.

Я уверен, что все работает так, как следует. Я думаю, что я скоро узнаю, как наш возврат НДС должен идти в этот месяц: -)

В настоящее время этот список генерируется из командной строки. Далее я буду смотреть на то, как построить правильный отчет Magento, поэтому его можно легко сгенерировать с Backend Magento.

Полный код доступен на github .

Другие советы

Я поставлю код ниже в модуль, который может помочь в качестве запуска, чтобы получить нужную вам данные.

Модуль добавит новый меню продажи товара-> продажи клиентов по НДС.Диапазоны даты настраиваются в приложении / Code / Community / PAJ / Pubbersales / helper / data.php

Скачать модуль здесь

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

Это функции, используемые в модуле

Это получит вашу коллекцию клиента

    public function getCustomerByVATID($_storeID=0)
{

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

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



    return $_result

}
.

И это получит общие продажи по дате

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

}
.

Затем вы экспортируете такие данные, с нужным диапазоном дата

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

        }
    }
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top