AbanteCart Development > Development Help Needed

Define max quantity products for customer


Claudio Garcia:
Hello Everybody

What i need is to block customer who orders more than 3 quantity for every product, not per order, Per customer and per all orders.
I was thinking to block customer to make one order. But its better customer makes orders who they want but restrict only 3 products quantity per each product per all orders. I know is not logical rule but its a requeriment.

I checked exists orders in Cart Controller Hook: storefront/controller/pages/checkout/cart.php:260 line

Claudio Garcia:
Hi Basara

Please help with this. A case is the following:

Order1 has 3 towells, 2 Shampoo
Order2 has 2 pamper
order3 has 1 haircom

If customer is doing a new order, i need Abantecart valide Customer not buy towells, Allow only 1 Shampoo, Only 1 pamper and 2 haircom, becuase it has a max of 3 products per all orders.

I did a view in the database who list:

Customer_id, product_id, and max_quantity.
2              pamper               2
2                towel                3
2                haircom           1

How can query this in cart.php?
What is the variable who has the customer_id
it i know who is customer_id maybe i can go a head in my proyect.

Thank you a lot for your help.

Claudio Garcia:
Hello everybody

I investigated how to do the quantity restriction and got it by this way:

I create a view in mysql workbech:

--- Code: ---CREATE
    DEFINER = `root`@`localhost`
VIEW `bitnami_abantecart`.`products_customer` AS
        `ac_op`.`product_id` AS `product_id`,
        `ac_op`.`name` AS `product_name`,
        SUM(`ac_op`.`quantity`) AS `quantity_hist`,
        `ac_c`.`customer_id` AS `customer_id`
        ((`bitnami_abantecart`.`ac_order_products` `ac_op`
        JOIN `bitnami_abantecart`.`ac_orders` `ac_o` ON (`ac_op`.`order_id` = `ac_o`.`order_id`))
        JOIN `bitnami_abantecart`.`ac_customers` `ac_c` ON (`ac_c`.`customer_id` = `ac_o`.`customer_id`))
        `ac_o`.`order_status_id` = 5
    GROUP BY `ac_op`.`product_id`, `ac_c`.`customer_id`, `ac_c`.`customer_id`

--- End code ---

This view show product_id, product_name, customer_id and sum(quantity) group by product and customer, so i can ask for orders made in history by customer with status "5-Complete".

And modify this
--- Code: ---htdocs\core\lib\cart.php from line 166
--- End code ---

--- Code: ---$product_result = $this->buildProductDetails($product_id, $quantity, $options);
            if (count($product_result)) {
                $product_data[$key] = $product_result;
                $product_data[$key]['key'] = $key;

// Query for max product per customer --- CG
$prod_query_customer = $this->db->query("SELECT * FROM products_customer WHERE customer_id =
'".(int)$this->customer->getId()."' and product_id = '".(int)$product_result['product_id']."' ");
$quantity_hist = $prod_query_customer->row['quantity_hist'];
$quantity_ask = $quantity_hist +  $product_result['quantity'];

if ( $quantity_hist >= $product_result['maximum']) {
$this->cust_data['error'] = "Ya compró " .$quantity_hist. " de " .$product_result['maximum']. " unidades permitidas de: " .$prod_query_customer->row['product_name']. ". El producto se ha retirado de su carro de compras. Por favor compre otros productos disponibles.";
$this->update($key, 0 );
elseif ($quantity_hist > 0 and ($quantity_ask > $product_result['maximum'])) {
$new_quantity = $product_result['maximum'] - $quantity_hist;
$this->cust_data['error'] = "Ya compró " .$quantity_hist. " de " .$product_result['maximum']. " unidades permitidas de: " .$prod_query_customer->row['product_name']. ". La cantidad solicitada se ha ajustado a " .$new_quantity. ". Por favor revise su pedido.";
$this->update($key, $new_quantity);

//else {

                //apply min and max for quantity once we have product details.
                // if ($quantity < $product_result['minimum']) {
                //    $this->language->load('checkout/cart', 'silent');
                //    $this->cust_data['error'] = $this->language->get('error_quantity_minimum');
                //    $this->update($key, $product_result['minimum']);
                //if ($product_result['maximum'] > 0) {
                //    $this->language->load('checkout/cart', 'silent');
                //    if ($quantity > $product_result['maximum']) {
                //        $this->cust_data['error'] = $this->language->get('error_quantity_maximum');
                //        $this->update($key, $product_result['maximum']);
                //    }
             //   }
            } else {
--- End code ---

I had to comment the quantity validation made by order (Abantecart default) to apply my own validation per customer.

save time and money contact me for custom software development

Hi ,
I am available for help you
Please let me know, If still searching for solution



[0] Message Index

Go to full version
Powered by SMFPacks Social Login Mod