Jump to content

Sumar monto al total del carrito - Prestashop 1.7.7.5


Recommended Posts

Hola,

¿Agregó este código de texto por edición de plantilla o viene dinámicamente? Aquí dos cosas que se deben verificar después de completar el pedido es el nuevo precio guardado en su base de datos de pedidos. El módulo de pago toma el precio de los detalles del pedido, no de la página. En segundo lugar, para agregar el precio en pdf, debe editar el pdf de la factura para agregar el precio.

Gracias

Link to comment
Share on other sites

52 minutes ago, SmartDataSoft said:

Hola,

¿Agregó este código de texto por edición de plantilla o viene dinámicamente? Aquí dos cosas que se deben verificar después de completar el pedido es el nuevo precio guardado en su base de datos de pedidos. El módulo de pago toma el precio de los detalles del pedido, no de la página. En segundo lugar, para agregar el precio en pdf, debe editar el pdf de la factura para agregar el precio.

Gracias

Una vez que llego al pago en ps_cart y ps_order aún no veo los datos guardados

Link to comment
Share on other sites

Puede comprobar la clase de arte c u otras clases que guardan los datos. Los datos no se guardan, el valor de los datos debe cambiar antes de guardarlos en la base de datos. Una vez que el valor se guarda en DB, encontrará el precio correcto en el área de pago.

 

1.7.7.0/classes/Cart.php

Link to comment
Share on other sites

11 hours ago, SmartDataSoft said:

Puede comprobar la clase de arte c u otras clases que guardan los datos. Los datos no se guardan, el valor de los datos debe cambiar antes de guardarlos en la base de datos. Una vez que el valor se guarda en DB, encontrará el precio correcto en el área de pago.

 

1.7.7.0/classes/Cart.php

esta bien, me voy a fijar, muchas gracias.

Link to comment
Share on other sites

Hola,

Sí, puede sobrescribir este archivo desde el área de sobrescritura. Simplemente siga el estándar de nombres de PrestaShop. Normalmente, la clase principal comienza con ClassNameCore, que será el nombre de ClassName de sobrescribir.

Espero que puedas hacer eso. Si comparte el código de modificación del archivo o el nombre de la función. Otros pueden obtener ayuda de esta publicación.

Gracias

Link to comment
Share on other sites

1 hour ago, SmartDataSoft said:

Hola,

Sí, puede sobrescribir este archivo desde el área de sobrescritura. Simplemente siga el estándar de nombres de PrestaShop. Normalmente, la clase principal comienza con ClassNameCore, que será el nombre de ClassName de sobrescribir.

Espero que puedas hacer eso. Si comparte el código de modificación del archivo o el nombre de la función. Otros pueden obtener ayuda de esta publicación.

Gracias

Muchas gracias, lo voy a tener en cuenta.. Voy consiguiendo los resultados muy lento, así que toda ayuda sirve para adelantar y no perder mucho tiempo..

Link to comment
Share on other sites


Aquí voy resumiendo los cambios que hice
Deben tener en cuenta que muchos de los cambios hechos más arriba los fui descartando

-----------------------------------------------------------------------------------------------------------------

\classes\Cart.php (esto no está terminado pero sirve)

Se agrega esta funcion debajo de:
public function getTotalShippingCost($delivery_option = null, $use_tax = true, Country $default_country = null)
{

}

public function getTotalImportCost($use_tax = true)
    {
        if ($this->getTotalWeight() > 0 && $this->getTotalWeight() <= 0.2)
        {
            $totalweight = 0.2; // Peso mínimo
        }
        else
        {
            $totalweight = $this->getTotalWeight();
        }

        $importCost = $totalweight * (21.5 * Context::getContext()->currency->getConversionRate());  // USD 21.5 costo en dólares americanos (moneda principal)

        $_total_importcost['with_tax'] = $importCost;
        $_total_importcost['without_tax'] = $importCost/1.1;  // Impuesto 10%

        return ($use_tax) ? $_total_importcost['with_tax'] : $_total_importcost['without_tax'];
    }

 

\themes\(nombre_del_tema)\modules\ps_shoppingcart\modal.tpl

<p><strong>{l s='Total products:' d='Shop.Theme.Checkout'}</strong>&nbsp;{$cart.subtotals.products.value}</p>
<p><strong>{l s='Total import:' d='Shop.Theme.Checkout'}</strong>&nbsp;{$cart.subtotals.import_cost.value}</p> {** Se agrega esta línea *}
<p><strong>{l s='Total shipping:' d='Shop.Theme.Checkout'}</strong>&nbsp;{$cart.subtotals.shipping.value} {hook h='displayCheckoutSubtotalDetails' subtotal=$cart.subtotals.shipping}</p>

 

\src\Adapter\Presenter\Cart\CartPresenter.php
Se agrega:

        $importCost = $cart->getTotalImportCost($this->includeTaxes());
        if ($importCost > 0)
        {
            $subtotals['import_cost'] = [
                'type' => 'import_cost',
                'label' => $this->translator->trans('Import Cost', [], 'Shop.Theme.Checkout'),
                'amount' => $importCost,
                'value' => $this->priceFormatter->format($importCost),
            ];
        }

Antes de:

        if (!$cart->isVirtualCart()) {
            $shippingCost = $cart->getTotalShippingCost(null, $this->includeTaxes());
        } else {
            $shippingCost = 0;
        }
        $subtotals['shipping'] = [
            'type' => 'shipping',
            'label' => $this->translator->trans('Shipping', [], 'Shop.Theme.Checkout'),
            'amount' => $shippingCost,
            'value' => $this->getShippingDisplayValue($cart, $shippingCost),
        ];

 

\src\Core\Cart\Calculator.php
Se reemplaza:

public function getTotal($ignoreProcessedFlag = false)
    {
        if (!$this->isProcessed && !$ignoreProcessedFlag) {
            throw new \Exception('Cart must be processed before getting its total');
        }

        $amount = $this->getRowTotalWithoutDiscount();
        $amount = $amount->sub($this->rounded($this->getDiscountTotal(), $this->computePrecision));
        $shippingFees = $this->fees->getInitialShippingFees();
        if (null !== $shippingFees) {
            $amount = $amount->add($this->rounded($shippingFees, $this->computePrecision));
        }
        $wrappingFees = $this->fees->getFinalWrappingFees();
        if (null !== $wrappingFees) {
            $amount = $amount->add($this->rounded($wrappingFees, $this->computePrecision));
        }

        return $amount;
    }

Por:

public function getTotal($ignoreProcessedFlag = false)
    {
        if (!$this->isProcessed && !$ignoreProcessedFlag) {
            throw new \Exception('Cart must be processed before getting its total');
        }

        $amount = $this->getRowTotalWithoutDiscount();
        $amount = $amount->sub($this->rounded($this->getDiscountTotal(), $this->computePrecision));
        $importCostFees = $this->fees->getInitialImportCostFees();                                     // Se agrega
        if (null !== $importCostFees) {                                                                // Se agrega
            $amount = $amount->add($this->rounded($importCostFees, $this->computePrecision));          // Se agrega
        }                                                                                              // Se agrega
        $shippingFees = $this->fees->getInitialShippingFees();
        if (null !== $shippingFees) {
            $amount = $amount->add($this->rounded($shippingFees, $this->computePrecision));
        }
        $wrappingFees = $this->fees->getFinalWrappingFees();
        if (null !== $wrappingFees) {
            $amount = $amount->add($this->rounded($wrappingFees, $this->computePrecision));
        }

        return $amount;
    }

 

\src\Core\Cart\Fees.php
Se agrega:

class Fees
{
    /**
     * @var AmountImmutable
     */
    protected $importCostFees;

    /**
     * @var AmountImmutable
     */
    protected $finalImportCostFees;

 

    public function __construct(?int $orderId = null)
    {
        $this->importCostFees = new AmountImmutable(); // Se agrega esta línea
        $this->shippingFees = new AmountImmutable();
        $this->orderId = $orderId;
    }

 

    /**
     * @param Cart $cart
     * @param CartRowCollection $cartRowCollection
     * @param int $computePrecision
     * @param int $id_carrier
     */
    public function processCalculation(
        Cart $cart,
        CartRowCollection $cartRowCollection,
        $computePrecision,
        $id_carrier = null
    ) {
        $this->importCostFees = new AmountImmutable(                  // Se agrega esta línea
            $cart->getTotalImportCost(true),                          // Se agrega esta línea
            $cart->getTotalImportCost(false)                          // Se agrega esta línea
        );                                                            // Se agrega esta línea
        $this->finalImportCostFees = clone $this->importCostFees;     // Se agrega esta línea

        if ($id_carrier === null) {
            $this->shippingFees = new AmountImmutable(
                $cart->getTotalShippingCost(null, true),
                $cart->getTotalShippingCost(null, false)
            );
        } else {

 

Edited by gjferrando (see edit history)
Link to comment
Share on other sites

\classes\PaymentModule.php
Agregar debajo de:
        $order->total_discounts = $order->total_discounts_tax_incl;

        $order->total_importcost_tax_excl = Tools::ps_round(
            (float) $cart->getTotalImportCost(false),
            $computingPrecision
        );
        $order->total_importcost_tax_incl = Tools::ps_round(
            (float) $cart->getTotalImportCost(true),
            $computingPrecision
        );
        $order->total_importcost = $order->total_importcost_tax_incl;


Agregar columnas a la tabla = ps_orders

  `total_importcost` decimal(20,6) NOT NULL DEFAULT '0.000000',
  `total_importcost_tax_incl` decimal(20,6) NOT NULL DEFAULT '0.000000',
  `total_importcost_tax_excl` decimal(20,6) NOT NULL DEFAULT '0.000000',

 

Edited by gjferrando (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...