Генерация Список продаж EC для возврата Великобритании НДС
Вопрос
Мы только недавно переключились на 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";
}
}
}
.