Jump to content

Problema con vales de descuento (SOLUCIONADO)


panzerca

Recommended Posts

hola a todos, tengo un porblema con los vales de descuento y es el siguiente tengo para una categoria varios vales de descuento para dicha categoria, y quiero que se aplique uno solo por compra de los productos correspondientes, si coloco otro vale descuento de otra categoria debe acumularse pero de esta en en particular solo se puede usar 1

Link to comment
Share on other sites

  • 1 month later...

Hola a todos, la verdad me senti muy frustado debido a que esta pregunta era de suma importancia y en el foro no encontre ningún tipo de ayuda, sin embargo considero que las personas que se encuentran aca, quizas no se encontraron con un problema asi.

Como enunciaba, mi poblema consistia en que en mi tienda existen varias categorias de productos y cada categoria podia tener varios vales de descuento diferentes; un comprador podie entrar y comprar productos de diferentes categorias y aplicar vales de descuento para cada categoria y acumularsen entre si, el detalle es que no se podia utilizar 2 vales de descuento de la misma categoria. El sistema por más que le configuraba parametros en los vales o me acumulaba descuentos por la misma categoria o me negaba los descuentos de las otras.

Cual fue mi solución, entre a lso codigos de la tienda y cambie algunas cosas, aqui les coloco los codigos que modifique o adicione para solucionar esto:

classes/Cart.php (adicion linea 979)

/************************************************************
Inicio codigo para verificar doble descuentos por categoria
************************************************************/
       if ($checkCartDiscount)
       {
           $disrt = $this->getDiscountsb();

           $countdv = 0;
           $countdvt = '';
           foreach ($disrt AS $disct)
           {            
               $countdvt = $countdvt.' '.intval(Discount::getIdCategories($disct['id_discount'])).' '.intval(Discount::getIdCategories($discountObj->id));
               if (intval(Discount::getIdCategories($disct['id_discount'])) ==  intval(Discount::getIdCategories($discountObj->id)))
               {
                   $countdv = intval($countdv) + 1;
               }
           }

           if (intval($countdv) == 0)
           {
           }else
           {
               return Tools::displayError('this voucher isn\'t cumulative on products with reduction or marked as on sale');
           }
       }
/************************************************************
Fin codigo para verificar doble descuentos por categoria
************************************************************/



classes/Discount.php (Antes del ultimo corchete al final del archivo linea 389 aprox.)

/************************************************************
Inicio codigo para verificar categoria de un descuento
************************************************************/
 static public function getIdCategories($id_discount)
 {
   $tmpcat = Db::getInstance()->getRow('
       SELECT `id_category`
       FROM `'._DB_PREFIX_.'discount_category`
       WHERE `id_discount` = '.intval($id_discount));

   return intval($tmpcat['id_category']);
 }
/************************************************************
Fin codigo para verificar categoria de un descuento
************************************************************/

Link to comment
Share on other sites

Tambien se me presento un segundo problema con descuentos y es que un producto en particular tiene descuento por cantidad y por vale, lógicamente no son acumulables entre si, para esto realice las siguientes modificaciones:

classes/Cart.php (Antes del ultimo corchete al final del archivo linea 1294 aprox.)

/**************************************************************************
Inicio codigo para verificar si un producto tiene descuento por cantidad
**************************************************************************/
   function checkDiscountValidityb($producid, $iddiscountcon)
   {
       $RowTemp = Db::getInstance()->getRow('
               SELECT `quantity`
               FROM `'._DB_PREFIX_.'cart_product`
               WHERE `id_cart` = '.($this->id).' AND `id_product` = '.$producid);

       $RowTemp2 = Db::getInstance()->getRow('
               SELECT `quantity`
               FROM `'._DB_PREFIX_.'discount_quantity`
               WHERE `id_product` = '.$producid);

       if (intval($RowTemp['quantity']) AND intval($RowTemp2['quantity']) AND intval($iddiscountcon))
           if (intval($RowTemp['quantity']) >= intval($RowTemp2['quantity']))
               return Tools::displayError('this voucher isn\'t cumulative on products with reduction or marked as on sale');

       return false;
   }
/**************************************************************************
Fin codigo para verificar si un producto tiene descuento por cantidad
**************************************************************************/



cart.php (linea 108)

/**************************************************************************
Inicio codigo para verificar si un porducto tiene descuento por cantidad
**************************************************************************/
           $RowTemp = Db::getInstance()->getRow('
               SELECT `'._DB_PREFIX_.'cart_product`.`id_product` , `'._DB_PREFIX_.'cart_discount`.`id_discount` , `'._DB_PREFIX_.'cart_product`.`id_cart`
               FROM `'._DB_PREFIX_.'cart_product` , `'._DB_PREFIX_.'cart_discount` , `'._DB_PREFIX_.'discount_category` , `'._DB_PREFIX_.'category_product`
               WHERE `'._DB_PREFIX_.'cart_product`.`id_product` = `'._DB_PREFIX_.'category_product`.`id_product`
                   AND `'._DB_PREFIX_.'cart_discount`.`id_cart` = `'._DB_PREFIX_.'cart_product`.`id_cart`
                   AND `'._DB_PREFIX_.'discount_category`.`id_category` = `'._DB_PREFIX_.'category_product`.`id_category`
                   AND `'._DB_PREFIX_.'discount_category`.`id_discount` = `'._DB_PREFIX_.'cart_discount`.`id_discount`
                   AND `'._DB_PREFIX_.'cart_product`.`id_product` = '.intval($idProduct).'
                   AND `'._DB_PREFIX_.'cart_product`.`id_cart` = '.(intval($cart->id)));

           if ($error = $cart->checkDiscountValidityb(intval($idProduct), intval($RowTemp['id_discount'])))
           {
               $errors[] = $error;
               $cart->deleteDiscount(intval($RowTemp['id_discount']));
           }
/**************************************************************************
Inicio codigo para verificar si un porducto tiene descuento por cantidad
**************************************************************************/



Espero les sirvan estos códigos en algún momento; además dejo los archivos con las modificaciones respectivas para los dos casos

codigos.zip

Link to comment
Share on other sites

  • 1 month later...

Perdona, sabes cómo se podría hacer para que un descuento de bienvenida se aplicara de forma automática ¿Es que no consigo hacerlo, ni que el descuento salga directamente una vez que se procesa la compra. Para poder utilizarlo tienen que meterse dentro del carrito antes de finalizar la compra.

No sé si me explico, me gustaría que en la primera compra se aplicara de forma automática el descuento de bienvenida. Sabes cómo se puede hacer esto?

Saludos y gracias

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...