Este sitio usa cookies, propias y de terceros.
Si se continúa con nosotros entendemos que se acepta el uso de cookies.

Desglose de IVA en "Detalles del pedido"

Tema en 'Discusión General' iniciado por Gnomodesign, 6 Sep 2015.

  1. Gnomodesign

    Gnomodesign Aprendiz de Prestashop

    15
    0
    0
    Hola, muy buenas.

    Quisiera saber cómo poder solucionar lo siguiente.

    Cuando mi cliente recibe un email de un pedido en su correo, de alguien que ha comprado en su tienda, le sale todo correcto: ref del producto, características del producto, cantidad, precios y total. Pero en los precios, no sale una nueva barra o campo desglosando (especificando) el IVA tanto del producto como del transporte. En la factura final sí que sale todo, pero donde no sale desglosado es en "Detalles del pedido"(que es mensaje que llega al correo), cosa bastante importante para la persona encargada de generar el pedido. Os adjunto una captura para que vean mejor a qué me refiero.

    He estado buscando, pero todo hace referencia al desglose de la factura final, y no al desglose en el email del pedido que el cliente recibe de un comprador. He estado mirando en los archivos de mailalerts, pero ahí no es. No doy con la solución. Igual es algo de back-office, pero lo tengo todo correctamente.

    ¡Saludos y espero de vuestra ayuda!
    ¡Muchas gracias!
     

    Adjuntos:

  2. Gnomodesign

    Gnomodesign Aprendiz de Prestashop

    15
    0
    0
    Hola de nuevo

    Esta puede ser la solución, pero me quedan unas dudas y por eso no termino de lograrlo.

    En /raiz/classes y el archivo es el PaymentModule.php A la altura donde pone Send an e-mail to customer, añadir la línea roja

    // Send an e-mail to customer
    if ($id_order_state != Configuration::get('PS_OS_ERROR') AND $id_order_state != Configuration::get('PS_OS_CANCELED') AND $customer->id)
    {
    $invoice = new Address((int)($order->id_address_invoice));
    $delivery = new Address((int)($order->id_address_delivery));
    $carrier = new Carrier((int)($order->id_carrier), $order->id_lang);
    $delivery_state = $delivery->id_state ? new State((int)($delivery->id_state)) : false;
    $invoice_state = $invoice->id_state ? new State((int)($invoice->id_state)) : false;
    $total_paid_notax = $order->total_products + $order->total_shipping + $order->total_wrapping - $order->total_discounts;
    $total_tax = $order->total_paid - $total_paid_notax - $order->total_shipping;
    $iva = $total_paid_notax * 0.21 ;
    $total_productos = $total_paid_notax - $order->total_shipping;

    Y un poco más abajo, donde están todas las variables:

    $data = array(
    '{firstname}' => $customer->firstname,
    '{lastname}' => $customer->lastname,
    '{email}' => $customer->email,
    '{delivery_block_txt}' => $this->_getFormatedAddress($delivery, "\n"),
    '{invoice_block_txt}' => $this->_getFormatedAddress($invoice, "\n"),
    '{delivery_block_html}' => $this->_getFormatedAddress($delivery, "
    ",
    array(
    'firstname' => '<span style="color:#DB3484; font-weight:bold;">%s</span>',
    'lastname' => '<span style="color:#DB3484; font-weight:bold;">%s</span>')),
    '{invoice_block_html}' => $this->_getFormatedAddress($invoice, "
    ",
    array(
    'firstname' => '<span style="color:#DB3484; font-weight:bold;">%s</span>',
    'lastname' => '<span style="color:#DB3484; font-weight:bold;">%s</span>')),
    '{delivery_company}' => $delivery->company,
    '{delivery_firstname}' => $delivery->firstname,
    '{delivery_lastname}' => $delivery->lastname,
    '{delivery_address1}' => $delivery->address1,
    '{delivery_address2}' => $delivery->address2,
    '{delivery_city}' => $delivery->city,
    '{delivery_postal_code}' => $delivery->postcode,
    '{delivery_country}' => $delivery->country,
    '{delivery_state}' => $delivery->id_state ? $delivery_state->name : '',
    '{delivery_phone}' => ($delivery->phone) ? $delivery->phone : $delivery->phone_mobile,
    '{delivery_other}' => $delivery->other,
    '{invoice_company}' => $invoice->company,
    '{invoice_vat_number}' => $invoice->vat_number,
    '{invoice_firstname}' => $invoice->firstname,
    '{invoice_lastname}' => $invoice->lastname,
    '{invoice_address2}' => $invoice->address2,
    '{invoice_address1}' => $invoice->address1,
    '{invoice_city}' => $invoice->city,
    '{invoice_postal_code}' => $invoice->postcode,
    '{invoice_country}' => $invoice->country,
    '{invoice_state}' => $invoice->id_state ? $invoice_state->name : '',
    '{invoice_phone}' => ($invoice->phone) ? $invoice->phone : $invoice->phone_mobile,
    '{invoice_other}' => $invoice->other,
    '{order_name}' => sprintf("#%06d", (int)($order->id)),
    '{date}' => Tools::displayDate(date('Y-m-d H:i:s'), (int)($order->id_lang), 1),
    '{carrier}' => $carrier->name,
    '{payment}' => Tools::substr($order->payment, 0, 32),
    '{products}' => $productsList,
    '{discounts}' => $discountsList,
    '{total_paid}' => Tools::displayPrice($order->total_paid, $currency, false),
    '{total_products}' => Tools::displayPrice($order->total_paid - $order->total_shipping - $order->total_wrapping + $order->total_discounts, $currency, false),
    '{total_discounts}' => Tools::displayPrice($order->total_discounts, $currency, false),
    '{total_shipping}' => Tools::displayPrice($order->total_shipping, $currency, false),
    '{total_tax}' => Tools::displayPrice($total_tax, $currency, false, false),
    '{total_paid_notax}' => $total_paid_notax,
    '{total_productos}' => $total_productos,
    '{iva}' => $iva,
    '{total_wrapping}' => Tools::displayPrice($order->total_wrapping, $currency, false));

    Y luego quedaría agregar esa variable en la plantilla de los mails, en /raiz/mails/es/order_conf.html (y en el txt si se utiliza). Pero no sé bien cómo y qué añadir exactamente. Voy justo en algunas cosas de php.


    Para empezar, he encontrado a modificar: new_order.html (que es el email con la plantilla que le llega al cliente tras un pedido de algún comprador). Aquí, como dije y muestro en la captura, me gustaría que se desglosara el iva del producto y transporte. Justo antes del TOTAL hay una suma de impuestos, pero lo que quiero es que debajo de cada precio, se le desglose el impuesto. El cliente va a tener este email y plantilla como referencia única y principal para antes y después de sacar el pedido a la calle.

    Como digo, no sé qué añadir exactamente a este archivo y si es a él al que hay que añadírselo y no a otro (PaymentModule.php), o a ambos diferentes cosas.

    Y un problema, el producto lleva el 10% y el transporte el 21%.

    ¿Me pueden terminar de echar una buena mano? Lo agradecería mucho.

    ¡Saludos!
     
  3. Gnomodesign

    Gnomodesign Aprendiz de Prestashop

    15
    0
    0
    Hola.

    He seguido dándole vueltas y vueltas y ya he avanzado yo mismo, pero surge un problema.

    Dentro del archivo PaymentModule.php he añadido las dos variables correspondientes. Están al final del todo y son las que corresponderían a sacar desglosado el iva del producto y el iva del transporte.


    // Send an e-mail to customer (one order = one email)
    if ($id_order_state != Configuration::get('PS_OS_ERROR') && $id_order_state != Configuration::get('PS_OS_CANCELED') && $this->context->customer->id)
    {
    $invoice = new Address($order->id_address_invoice);
    $delivery = new Address($order->id_address_delivery);
    $delivery_state = $delivery->id_state ? new State($delivery->id_state) : false;
    $invoice_state = $invoice->id_state ? new State($invoice->id_state) : false;
    $iva = $total_paid_notax * 0.21 ;

    $data = array(
    '{firstname}' => $this->context->customer->firstname,
    '{lastname}' => $this->context->customer->lastname,
    '{email}' => $this->context->customer->email,
    '{delivery_block_txt}' => $this->_getFormatedAddress($delivery, "\n"),
    '{invoice_block_txt}' => $this->_getFormatedAddress($invoice, "\n"),
    '{delivery_block_html}' => $this->_getFormatedAddress($delivery, '
    ', array(
    'firstname' => '<span style="font-weight:bold;">%s</span>',
    'lastname' => '<span style="font-weight:bold;">%s</span>'
    )),
    '{invoice_block_html}' => $this->_getFormatedAddress($invoice, '
    ', array(
    'firstname' => '<span style="font-weight:bold;">%s</span>',
    'lastname' => '<span style="font-weight:bold;">%s</span>'
    )),
    '{delivery_company}' => $delivery->company,
    '{delivery_firstname}' => $delivery->firstname,
    '{delivery_lastname}' => $delivery->lastname,
    '{delivery_address1}' => $delivery->address1,
    '{delivery_address2}' => $delivery->address2,
    '{delivery_city}' => $delivery->city,
    '{delivery_postal_code}' => $delivery->postcode,
    '{delivery_country}' => $delivery->country,
    '{delivery_state}' => $delivery->id_state ? $delivery_state->name : '',
    '{delivery_phone}' => ($delivery->phone) ? $delivery->phone : $delivery->phone_mobile,
    '{delivery_other}' => $delivery->other,
    '{invoice_company}' => $invoice->company,
    '{invoice_vat_number}' => $invoice->vat_number,
    '{invoice_firstname}' => $invoice->firstname,
    '{invoice_lastname}' => $invoice->lastname,
    '{invoice_address2}' => $invoice->address2,
    '{invoice_address1}' => $invoice->address1,
    '{invoice_city}' => $invoice->city,
    '{invoice_postal_code}' => $invoice->postcode,
    '{invoice_country}' => $invoice->country,
    '{invoice_state}' => $invoice->id_state ? $invoice_state->name : '',
    '{invoice_phone}' => ($invoice->phone) ? $invoice->phone : $invoice->phone_mobile,
    '{invoice_other}' => $invoice->other,
    '{order_name}' => $order->getUniqReference(),
    '{date}' => Tools::displayDate(date('Y-m-d H:i:s'), null, 1),
    '{carrier}' => ($virtual_product || !isset($carrier->name)) ? Tools::displayError('No carrier') : $carrier->name,
    '{payment}' => Tools::substr($order->payment, 0, 32),
    '{products}' => $product_list_html,
    '{products_txt}' => $product_list_txt,
    '{discounts}' => $cart_rules_list_html,
    '{discounts_txt}' => $cart_rules_list_txt,
    '{total_paid}' => Tools::displayPrice($order->total_paid, $this->context->currency, false),
    '{total_products}' => Tools::displayPrice($order->total_paid - $order->total_shipping - $order->total_wrapping + $order->total_discounts, $this->context->currency, false),
    '{total_discounts}' => Tools::displayPrice($order->total_discounts, $this->context->currency, false),
    '{total_shipping}' => Tools::displayPrice($order->total_shipping, $this->context->currency, false),
    '{total_wrapping}' => Tools::displayPrice($order->total_wrapping, $this->context->currency, false),
    '{total_tax_paid}' => Tools::displayPrice(($order->total_products_wt - $order->total_products) + ($order->total_shipping_tax_incl - $order->total_shipping_tax_excl), $this->context->currency, false),
    '{total_iva_productos}' => Tools::displayPrice(($order->total_products_wt - $order->total_products), $this->context->currency, false),
    '{total_iva_envio}' => Tools::displayPrice(($order->total_shipping_tax_incl - $order->total_shipping_tax_excl), $this->context->currency, false)

    );


    Por otro lado, en el archivo new_order.html (que es la plantilla concreta de "detalles del pedido), he añadido ambas variables. Están correctamente puestas, porque como van a ver en la imagen adjunta, se muestran muy bien. El problema es que no recoge la orden que se le da desde PaymentModule.php, por que no hace la cuenta debida y únicamente se me muestra el html. Creo entonces, que el problema está en estas dos líneas de código en rojo creadas en PaymentModule.php.

    ¿Pueden terminar de ayudarme?

    ¡Muchas gracias!
    ¡Saludos!
     

    Adjuntos:

  4. lokai

    lokai Aprendiz de Prestashop

    28
    0
    0
    En mi caso para modificar esa plantilla y añadir nuevas variables, no he modificado PaymentModule.php, lo que yo he modificado es mailalerts.php dentro del modulo mailalerts.
    He hecho prácticamente lo mismo que tu pero en mi caso para añadir y desglosar los gastos contra reembolso.
     
  5. Gnomodesign

    Gnomodesign Aprendiz de Prestashop

    15
    0
    0
    Hola, lokai.

    Tu pista o solución me ha ayudado justo como quería. Las dos líneas de código que estaba colocando en PaymentModule.php, eran en el archivo que mencionabas, mailerts.php.

    Una pregunta. Yo lo he hecho en esta ocasión con los emails que llegan tras el pago por transferencia bancaria. ¿No sirve con esa modificación que se ha hecho para los otros dos o tres pagos? Por ejemplo, si en vez de pagar mediante transferencia bancaria, se hace con tarjeta, paypal o contrareembolso, ¿saldría también? Entiendo que debería modificar/añadir los html y texto en los archivos correspondientes, pero con las dos líneas agregadas en mailerts.php., ¿bastaría para que se efectuara esta cuenta como deseamos en todos los pagos?

    ¿Me entiendes?

    ¡Muchas gracias!
     
  6. lokai

    lokai Aprendiz de Prestashop

    28
    0
    0
    Como bien dices, con modificar los textos y html de cada aviso para añadir las nuevas variables, ya te aparece.

    Saludos
     
  7. pambli

    pambli Aprendiz de Prestashop

    5
    0
    0
    Hola a tod@s:
    Lo primero perdonad por levantar el tema pero me urge hacer algo como lo que Gnomodesign a conseguido hacer en la factura.
    De programación mal que mal ando, yo uso la versión 1.6.1.4 y me da un fallo como el que adjunto:
    Me divide el IVA del transporte en dos partes cuando debería ser una.
    Por otro lado me gustaría saber si el código que habeis dejado aquí lo puedo añadir a mi versión para que aparezcan desglosados como la imagen que mostrais.

    Gracias y saludos
     

    Adjuntos:

Compartir esta página