为英国增值税返回生成EC销售列表
题
我们最近刚刚切换到Magento,它一直在工作。然而,当我们到达增值税时期的结束时,我正在努力弄清楚如何生成必要的报告。具体而言,EC销售列表。
我们需要一个列出欧盟B2B客户的增值税ID的报告及其在此期间的总支出。在Magento,我看不出任何方法,谷歌搜索绝对没有关于这个问题。
必须有许多基于英国的Magento系统运行,通常需要生成此信息,因此必须是可能的。任何想法我该怎么做?
解决方案 2
到底,我写了自己的扩展。我之前没有做任何(非琐碎的)洋养坞,所以我认为这是一个开始的好地方。
(tl,dr:它是在 github )
一旦你深入挖掘要求,它比在第一次出现时稍微多。基于送货地址,增值税(或未收取),因此我需要检查有效的增值税ID,而不是客户模型。 所以,这就是我所做的。
首先,我在送货地址表上使用连接获取所有发票,其中我检查发票创建日期并检查设置了生成的vat_is_valid
标志,并且vat_id
不是null。
$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)
;
.
最后,我为每个增值税ID添加了所有发票金额,从而扣除该增值税ID的所有信用备忘录,然后输出结果。
我很确定一切都应该工作。我想我会尽快发现,因为我们的增值税返回必须进入本月: - )
当前,此列表是从命令行生成的。接下来,我将研究如何构建合适的Magento报告,以便可以从Magento后端轻松生成。
完整代码在 github 。
其他提示
我将下面的代码放入一个可能有助于获取所需数据的起始块的模块。
模块将通过增值税ID添加新的菜单项销售 - >客户销售。日期范围在App / Code / Community / PAJ / Customeral / 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";
}
}
}
.