gjferrando Posted August 24, 2021 Share Posted August 24, 2021 Hola a todos, Estuve modificando mi Prestashop 1.7.7.5 para agregar gastos de importación según el peso del artículo. He logrado mostrarlo en algunas partes, pero al momento del pago no suma al total, tampoco en los correos electrónicos: Link to comment Share on other sites More sharing options...
SmartDataSoft Posted August 24, 2021 Share Posted August 24, 2021 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 More sharing options...
gjferrando Posted August 24, 2021 Author Share Posted August 24, 2021 (edited) Edité estos dos archivos: C:\wamp64\www\py\src\Adapter\Presenter\Cart\CartPresenter.php C:\wamp64\www\py\themes\(nombre_del_tema)\modules\ps_shoppingcart\modal.tpl Edited August 25, 2021 by gjferrando (see edit history) Link to comment Share on other sites More sharing options...
gjferrando Posted August 24, 2021 Author Share Posted August 24, 2021 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 More sharing options...
SmartDataSoft Posted August 24, 2021 Share Posted August 24, 2021 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 More sharing options...
gjferrando Posted August 24, 2021 Author Share Posted August 24, 2021 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 More sharing options...
gjferrando Posted August 25, 2021 Author Share Posted August 25, 2021 (edited) Ya estoy a medio camino.. Ahora mi consulta es: Si lo armo luego como un módulo ¿Puedo hacer un override de estos archivos? \classes\Cart.php \src\Adapter\Presenter\Cart\CartPresenter.php \src\Core\Cart\Calculator.php \src\Core\Cart\Fees.php Edited August 25, 2021 by gjferrando (see edit history) Link to comment Share on other sites More sharing options...
SmartDataSoft Posted August 25, 2021 Share Posted August 25, 2021 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 More sharing options...
gjferrando Posted August 25, 2021 Author Share Posted August 25, 2021 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 More sharing options...
gjferrando Posted August 25, 2021 Author Share Posted August 25, 2021 (edited) 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> {$cart.subtotals.products.value}</p> <p><strong>{l s='Total import:' d='Shop.Theme.Checkout'}</strong> {$cart.subtotals.import_cost.value}</p> {** Se agrega esta línea *} <p><strong>{l s='Total shipping:' d='Shop.Theme.Checkout'}</strong> {$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 August 31, 2021 by gjferrando (see edit history) Link to comment Share on other sites More sharing options...
gjferrando Posted August 31, 2021 Author Share Posted August 31, 2021 (edited) \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 August 31, 2021 by gjferrando (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now