英国のVAT RetuteのEC販売リストを生成します
質問
最近Magentoに切り替えて、それは非常にうまく機能しています。しかし、VAT期間の終わりに達すると、必要なレポートを生成する方法を把握するのに苦労しています。具体的には、ECの販売リスト。
EU B2Bの顧客のVAT IDとその期間中の合計の費用をリストするレポートが必要です。Magentoでこれを行う方法はわかりません。
この情報を生成する必要があるので、多くの英国ベースのMagentoシステムが実行されている必要があるため、可能である必要があります。どのようにしてこれを行うのか?
解決 2
最後に、私は自分の延長を書きました。私は以前(些細な)マゼントの開発をしなかったので、私はこれを始めるのが良い場所と考えました。
(TL、DR: github )
これまでに、あなたが要件を少し深く掘ると、最初の外観よりももう少しはもう少しあります。 VATは配送先住所に基づいて課金され(または充電されていない)ので、顧客モデルではなく、有効なVAT 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)
;
.
最後に、VAT IDごとにすべての請求項を追加し、そのVAT IDのすべてのクレジットメモを差し引き、その結果を出力します。
すべてがそれほどうまくいったことをよく把握しています。私たちのVATの返品が今月中に行かなければならないのですぐにすぐに見つけると思います。 - )
現在このリストはコマンドラインから生成されます。次に、Magentoバックエンドから簡単に生成できるように、適切なMagentoレポートを作成する方法を調べます。
フルコードは、 github
にあります。他のヒント
私はコードを必要なデータを取得するための開始ブロックとして役立つかもしれないモジュールに下のコードを置きます。
モジュールは、VAT IDで新しいメニュー項目の販売 - >カスタマーセールスを追加します。日付範囲は、アプリ/コード/コミュニティ/ PAJ / Customerales / 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";
}
}
}
.