Magento - 对自定义报价总计字段应用税

2024-01-07

我为 Magento 创建了一个附加费模块,它在报价中添加了一个自定义总计字段。附加费含税输入到 Magento 中。我已成功获取将附加费添加到报价中的模块,并且结帐页面上的总计是正确的。

当我尝试对附加费征税,以便将其包含并显示在结账页面的税收字段中时,我的问题就出现了。目前它仅包括产品税和运费。

我已设法计算附加费的税费,但无法将税费应用于报价,以便将其显示在税费字段中,但也不认为我的方法非常正确。任何帮助将非常感激。

class ********_Deposits_Model_Quote_Address_Total_Surcharge extends Mage_Sales_Model_Quote_Address_Total_Abstract {

 protected $_config = null;

 public function __construct()
 {
    $this->setCode('surcharge_price');
    $this->_config      = Mage::getSingleton('tax/config');
    $this->_store = Mage::app()->getStore();
 }

 protected function _calculateTax(Mage_Sales_Model_Quote_Address $address)
{
    $calculator     = Mage::getSingleton('tax/calculation');
    $inclTax        = $this->_config->priceIncludesTax($this->_store);

    $taxRateRequest = $calculator->getRateRequest(
        $address,
        $address->getQuote()->getBillingAddress(),
        $address->getQuote()->getCustomerTaxClassId(),
        $this->_store
    );

    $taxRateRequest->setProductClassId(Mage::getStoreConfig('********/surcharges/tax_class', $this->_store));

    $rate = $calculator->getRate($taxRateRequest);

    $baseTax = $tax = $calculator->calcTaxAmount($address->getBaseSurchargePriceAmount(), $rate, $inclTax, true);


}

/**
 * Collect address subtotal
 *
 * @param   ********_Surcharges_Model_Quote_Address $address
 * @return  ********_Surcharges_Model_Quote_Address_Total_Surcharge
 */
public function collect(Mage_Sales_Model_Quote_Address $address)
{

    parent::collect($address);

    $this->_setAmount(0)->_setBaseAmount(0);

    // If Surcharges Is Enabled Then Calculate Away :-)
    if(Mage::getStoreConfig('********/surcharges/surcharge_enabled')) {

      $items = $this->_getAddressItems($address);
      if (!count($items)) {
          return $this;
      }

      // Calculate Total Surcharge For Items In Quote (Base Prices!)
      $surcharge = 0.0;
      foreach ($items as $item) {
        $price = $item->getData('base_surcharge_price', null);
        if(isset($price)) {
          $surcharge += $item->getData('base_surcharge_price') * $item->getQty();
        }
      }

     $this->_setAmount($surcharge);
     $this->_setBaseAmount($surcharge);

     $this->_calculateTax($address);
    }


    return $this;
}

public function fetch(Mage_Sales_Model_Quote_Address $address)
{

  if(Mage::getStoreConfig('********/surcharges/surcharge_enabled')) {
    $surcharge = $address->getSurchargePriceAmount();
    if(isset($surcharge) && $surcharge > 0) {
      $address->addTotal(array(
          'code'  => $this->getCode(),
          'title' => Mage::getStoreConfig('********/surcharges/surcharge_label'),
          'value' => $surcharge
      ));
    }
  }

  return $this;
}

public function getLabel()
{
    return Mage::getStoreConfig('********/surcharges/surcharge_label');
}

我设法使用以下代码解决了这个问题。这不是最好的解决方案,但花了几个小时尝试做到这一点,但没有快速取得进展。 Asterix 需要更换。

class *****_Deposits_Model_Quote_Address_Total_Surcharge extends Mage_Sales_Model_Quote_Address_Total_Abstract {

 protected $_taxConfig = null;

 public function __construct()
 {
    $this->setCode('surcharge_price');
    $this->_taxConfig      = Mage::getSingleton('tax/config');
    $this->_store = Mage::app()->getStore();
 }

 protected function _calculateTax(Mage_Sales_Model_Quote_Address $address)
{
    $calculator     = Mage::getSingleton('tax/calculation');
    $calculator->setCustomer($address->getQuote()->getCustomer());

    $inclTax        = $this->_taxConfig->priceIncludesTax($this->_store);

    $taxRateRequest = $calculator->getRateRequest(
        $address,
        $address->getQuote()->getBillingAddress(),
        $address->getQuote()->getCustomerTaxClassId(),
        $this->_store
    );

    $taxRateRequest->setProductClassId(Mage::getStoreConfig('*****/surcharges/tax_class', $this->_store));

    $rate = $calculator->getRate($taxRateRequest);

    if($rate > 0.0) {
      $baseTax = $calculator->calcTaxAmount($address->getBaseSurchargePriceAmount(), $rate, $inclTax, true);
      $tax = $address->getQuote()->getStore()->convertPrice($baseTax, false);

      $address->addTotalAmount('tax', $tax);
      $address->addBaseTotalAmount('tax', $baseTax);

      $rates = array();
      foreach ($address->getAppliedTaxes() as $rate) {
        $rate['amount'] = $rate['amount'] + $tax;
        $rate['base_amount'] = $rate['base_amount'] + $baseTax;
        $rates[] = $rate;
      }

      $address->setAppliedTaxes($rates);

      if($inclTax) {
        $address->setGrandTotal($address->getGrandTotal() - $tax);
        $address->setBaseGrandTotal($address->getBaseGrandTotal() - $baseTax);
      }
    }

}

/**
 * Collect address subtotal
 *
 * @param   *****_Surcharges_Model_Quote_Address $address
 * @return  *****_Surcharges_Model_Quote_Address_Total_Surcharge
 */
public function collect(Mage_Sales_Model_Quote_Address $address)
{

    parent::collect($address);

    // Clear Cached Values As Multiple Addresses Causes Values To Be Added Twice Otherwise!
    $this->_setAmount(0)->_setBaseAmount(0);

    // If Surcharges Is Enabled Then Calculate Away :-)
    if(Mage::getStoreConfig('*****/surcharges/surcharge_enabled')) {

      $items = $this->_getAddressItems($address);
      if (!count($items)) {
          return $this;
      }

      // Calculate Total Surcharge For Items In Quote (Base Prices!)
      $surcharge = 0.0;
      foreach ($items as $item) {
        $price = $item->getData('base_surcharge_price', null);
        if(isset($price)) {
          $surcharge += $item->getData('base_surcharge_price') * $item->getQty();
        }
      }

     $this->_setAmount($address->getQuote()->getStore()->convertPrice($surcharge, false));
     $this->_setBaseAmount($surcharge);

      $this->_calculateTax($address);
    }


    return $this;
}

/**
 * Assign subtotal amount and label to address object
 *
 * @param   *****_Surcharges_Model_Quote_Address $address
 * @return  *****_Surcharges_Model_Quote_Address_Total_Surcharge
 */
public function fetch(Mage_Sales_Model_Quote_Address $address)
{

  if(Mage::getStoreConfig('*****/surcharges/surcharge_enabled')) {
    $surcharge = $address->getSurchargePriceAmount();
    if(isset($surcharge) && $surcharge > 0) {
      $address->addTotal(array(
          'code'  => $this->getCode(),
          'title' => Mage::getStoreConfig('*****/surcharges/surcharge_label'),
          'value' => $surcharge
      ));
    }
  }

  return $this;
}

/**
 * Get Surcharge label
 *
 * @return string
 */
public function getLabel()
{
    return Mage::getStoreConfig('*****/surcharges/surcharge_label');
}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Magento - 对自定义报价总计字段应用税 的相关文章

  • Magento - 重新索引过程存在问题 - 目录产品 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我刚刚重新索引了运行 v1 6 的 Magenot 安装上的数据 现在我收到一条消息 指出 There was a pr
  • Magento group by 日期字段上的子句

    我需要获取指定月份一天内 grand total 的订单总数 SUM MIN MAX 和 AVG 这就是我正在做的事情 collection gt getSelect gt columns SUM base grand total AS t
  • 如何将我的 Magento 迷你搜索表单移动到模板标题中的另一个位置?

    我正在构建我的第一个自定义 Magento 主题 虽然进展缓慢 但是is去 我去掉了主页上最初保存迷你搜索表单的栏 而是想将搜索表单放入新标题中 这是我的标题的代码header phtml div a href title class lo
  • Magento - 致命错误:类名必须是有效的对象或字符串

    我在安装 Magento 时遇到问题 希望有人能帮助我解决 当我访问该网站时 我突然开始收到以下错误消息 Fatal error Class name must be a valid object or a string in app co
  • 将附加模板添加到右侧边栏 magento

    我只是尝试添加额外的模板文件以在右侧栏中包含内容块 但失败了 下面是我的努力 添加到 local xml 文件中
  • Magento:设置集合限制

    我试图找出的问题是如何对集合设置限制 我在 Google 上找到的答案仅适用于具有 setPage pageNum pageSize 的目录 这对任何其他集合都不起作用 请参阅下面的答案 做这件事有很多种方法 collection Mage
  • Magento - 没有新闻通讯订阅和取消订阅事件

    为什么在客户或新闻通讯模块中的新闻通讯订阅 取消订阅过程中或周围没有调度任何事件 我目前面临的唯一选择是使用订阅者模型的重写来适应这里的一些代码 有没有其他人有一个好的替代方案 或者我错过了什么 我遇到了需要监听订阅 取消订阅事件的情况 我
  • 如何导出带有产品完整 url 的产品 csv

    我想导出包含完整产品 url 的产品 CSV 即包括基本 url 我不想手动执行此操作 是否可以自定义代码 以便产品导出具有完整的 url
  • 在 magento connect 中安装任何扩展时出现错误

    我的商店里有 magento 社区版 7 1 我尝试使用 magento 商店安装扩展 但所有类型的扩展都出现这样的错误 Community Dropifi Dropificontactwidget 无法解析主机 connect20 mag
  • 如何配置 Magento Enterprise 使用 Solr 作为主要搜索引擎?

    我尝试寻找文档 但它非常稀疏 我编写了以下指南 希望它可以帮助人们节省 2 3 个小时的安装 设置和配置时间 与 MySQL 全文搜索标准设置相比 使用 Solr 带来的性能提升非常惊人 在您的 Magento 安装中让它工作绝对值得花时间
  • 安装新的 Magento 扩展需要注销/登录,否则您会在管理页面中收到 404

    两个不同的人告诉我 以下是 Magento 的一个已知问题 安装新扩展时 管理员尝试访问 配置扩展程序 并获取 404 页面 去的方法 解决此问题的方法是注销然后登录到他的管理面板 在设计扩展时有没有办法解决这个问题 这方面有一个悬而未决的
  • 如何覆盖 app/code/core/Mage/Core/functions.php 中的 Magento 函数

    我需要重写此文件中的一个函数 应用程序 代码 核心 Mage Core functions php 问题是 它是如此核心 以至于没有与之关联的类 可能是因为 Core 甚至不是一个模块 有谁知道如何在没有类的情况下覆盖文件中的函数 任何帮助
  • 如何自定义 magento onepage 结账表单

    我正在使用 Magento 1 5 1 0 我想在单页结账表单中自定义地址块 我想删除 传真 输入字段并将 区域 下拉列表放在国家 地区 下拉列表 下方 这个形式是在哪里定义的 亲切的问候 伯蒂 导航到您的主题文件夹 默认文件位于以下位置
  • 将搜索栏从 magento 主页的标题中移动

    我是 magento 的新手 我想将搜索栏从标题移动到主页的中间位置 以便它仅显示在主页上 我在 magento 论坛上阅读了许多相关答案 但所有人都在尝试编辑 box css 中的 mini search 元素 但不幸的是我在此文件中没有
  • reindex 目录 URL 在 magento 中重写永无止境

    我已使用自定义导入配置文件将 6K 类别和 16K 产品导入到 magento 当我尝试重新索引时 除了 目录 URL 重写 之外的所有内容都正常工作 该 目录 URL 重写 一直显示 正在处理 但从未完成 日志和异常文件不显示任何内容 我
  • IE 抛出 JavaScript TypeError 但在 chrome 上不抛出

    描述在我们的 Magento 购物车上 当用户单击添加到购物篮在任何 Internet Explorer 浏览器的 产品详细信息 页面上单击按钮 浏览器中都会弹出一个包含以下错误消息的窗口 异常 类型错误 无法获取未定义或空引用的属性 ta
  • Magento:每个订单限制类别中的 3 个产品

    我正在尝试在 Magento 中设置一个示例产品类别 允许人们每次购买时最多选择 3 个免费样品 但如何限制每个订单仅从该类别中选择 3 个样品 EDIT 这是 app code local MagePal LimitCartProduct
  • 为什么在网关取消的订单状态没有转换为“ payment_pending ”?

    我正在使用 Magento 社区 ver1 6 1 0 我在 Magento wiki 上找到了这个状态图http www magentocommerce com wiki 2 magento concepts and architectu
  • 过滤两个类别的产品集合 Magento 1.7

    我想要获取包含 A 类或 B 类产品的产品集合 我已经能够使用以下 php 代码成功获取这些产品 collection Mage getModel catalog product gt getCollection gt joinField
  • Magento 1.8 - 高级搜索不起作用

    我在最新版本的 magento 中发现了一个奇怪的错误 高级搜索工具无法正常工作 我做了什么 安装 magento 的新副本 在管理页面添加了一个名为 测试 1 的产品 重新索引全部 清除所有缓存 At the frontend page

随机推荐

  • SQL*Plus :强制它返回错误代码

    我有一个存储过程 它有一个 OUT 参数 指示错误代码 如果错误代码不为 0 那么我会提出错误 DECLARE BEGIN foo err code IF err code lt gt 0 THEN raise application er
  • LINQ-to-Entities(不是 Linq-to-SQL)中是否有 DataContext?

    我最近问了一个关于跟踪 Linq to Entity 的问题 https stackoverflow com questions 137712 sql tracing linq to entities 我觉得答案之一 https stack
  • 当表中不存在列时如何将 paginate() 与having() 子句一起使用

    我有一个棘手的案例 以下数据库查询不起作用 DB table posts gt select posts DB raw haversineSQL as distance gt having distance lt distance gt p
  • Java 8 中多重继承的用法

    Am I usingJava 8 的一个功能或misusing it 请参阅下面的代码和解释以了解为什么选择这样 public interface Drawable public void compileProgram public Pro
  • 线程编程中的守护简单列表?

    我正在阅读一本 POSIX 线程书籍进行一些练习 并且我试图找出在一个简单的单链表中需要互斥锁的位置作为一个小练习问题 例如 如果我有一个节点结构列表 template
  • PHP - 使用 LOAD DATA INFILE 将 CSV 文件导入到 mysql 数据库

    我有一个这样的 csv 文件数据 Date Name Call Type Number Duration Address PostalCode City State Country Latitude Longitude Sep 18 201
  • 使用unicode字符u201c

    我是 python 新手 在理解 unicode 时遇到问题 我在用着 Python 3 4 我花了一整天的时间试图通过阅读有关 unicode 的内容来解决这个问题 包括http www fileformat info info unic
  • 具有新 Firebase 的 Nodejs 应用程序不会检索数据库项目

    我是 Nodejs 新手 但已经有一个工作的 js 客户端程序 Firebase 版本 3 0 2 事实证明 我需要一个服务器来完成一些在 js 客户端中不可能完成的简单事情 当我在 Nodejs 中尝试这个基本的事情时 没有任何反应 数据
  • 在 MATLAB 中查找变量的小数位数

    给定变量 x 12 3442 我想知道变量的小数位数 在这种情况下 结果将是 4 如何在不反复试验的情况下做到这一点 这是一个紧凑的方法 y x 10 1 20 find y round y 1 假设x是您的数字 20 是小数点后的最大位数
  • 在java中将数组的字符串表示形式转换回int数组

    刚刚开始使用 Java 编程 如果我有一个存储在 txt 文件中的数组 如下所示 10 22 30 55 10 20 19 如何将其转换回正常的 int 数组以在代码中使用 我需要能够将其简单地存储在这样的 txt 文件中 以便我可以手动对
  • 如何在 Windows 上安装 python-levenshtein?

    经过几天的搜索 我准备放弃寻找 Python 2 7 Windows 64 位 的预编译二进制文件Python Levenshtein 库 http pypi python org pypi python Levenshtein 所以不是我
  • Java 中的 getter/setter

    我是 Java 新手 但有一些使用 ActionScript 3 的 OOP 经验 因此我尝试依靠我所知道的内容进行迁移 在 ActionScript 3 中 您可以使用 get 和 set 关键字创建 getter 和 setter 这意
  • 相机控件在 iOS 7 上不可见

    我使用图像选择器控制器来调用设备相机 下面列出的代码在 iOS 7 下工作正常 但是当我在 iOS 7 上使用相同的代码启动相机时 我看不到 使用 和 取消 按钮 void getCameraPicture UIImagePickerCon
  • R - 使用“rep”创建重复序列

    我想知道是否有更简单的方法来制作列表 例如 10 4 20 6 和 30 3 然后手写 example lt c 4 4 4 4 与函数 rep 我知道我可以重复某个序列 n 次 每次重复 n 次 但我不知道如何用每个数字的不同数量来制作一
  • O(n) 算法的计算时间可以超过 O(n^2) 吗?

    假设我有两种算法 for int i 0 i lt n i for int j 0 j lt n j do something in constant time 这自然是O n 2 假设我也有 for int i 0 i lt 100 i
  • 渐进式 Web 应用程序中的重定向

    我试图在通知单击时重定向到渐进式网络应用程序中的特定网址 但它不会重定向 情况 1 如果 Web 应用程序未添加到主屏幕 则在收到通知后单击浏览器窗口将打开并重定向到所需的 URL 情况 2 如果 Web 应用程序添加到主屏幕 则登陆页面是
  • PostgreSQL 9.1 时区

    我正在使用 postgresql 在数据库中存储一些日期 在我的应用程序中 它完全了解时区是至关重要的 我正在客户端 服务器和数据库之间进行一些基本测试 我从 GWT 中执行的浏览器应用程序发送日期 并读取 postgresql 上的日期
  • iTunes Connect - 无法邀请预发行应用程序的“内部测试人员”

    我的应用程序已获准通过新的 Apple TestFlight 应用程序进行分发 我试图通过邀请 内部测试员 iTunes Connect gt Prerelease gt Internal Testers但我看到的只是两个信息框 要开始测试
  • Pycharm 不接受“list[Example]”作为项目列表的类型提示[重复]

    这个问题在这里已经有答案了 我在 PyCharm 中发现了一个奇怪的类型 Example是我自己的班级 但我想这并不那么重要 因为 IDE 正在抱怨list类型没有定义 getitem 这是不正确的方法 我想知道这是一个错误还是我以错误的方
  • Magento - 对自定义报价总计字段应用税

    我为 Magento 创建了一个附加费模块 它在报价中添加了一个自定义总计字段 附加费含税输入到 Magento 中 我已成功获取将附加费添加到报价中的模块 并且结帐页面上的总计是正确的 当我尝试对附加费征税 以便将其包含并显示在结账页面的