Boas a todos, tenho este modulo que arranjei neste site https://inchoo.net/ecommerce/magento/magento-maximum-allowed-order-amount/. Que faz quase o que eu quero.
Mas preciso de em vez de ir buscar a quantia máxima quero que só seja possivel fazer um total de 60€ em compras trimestrais, para tal fiz este bocado dentro do 'Observer.php':
Código (PHP):
até ai tudo bem, mas a partir do momento em que se está a aproximar do valor o botao de submeter compra quando se clica fica a pensar e não sai dali.
O que poderá ser ?
Mas preciso de em vez de ir buscar a quantia máxima quero que só seja possivel fazer um total de 60€ em compras trimestrais, para tal fiz este bocado dentro do 'Observer.php':
Código (PHP):
public function enforceSingleOrderLimit($observer)
{
if (!$this->_helper->isModuleEnabled()) {
return;
}
$quote = $observer->getEvent()->getQuote();
//Get current customer ID
$customerId = Mage::getSingleton('customer/session')->getCustomer()->getId();
//Get the resource model
$resource = Mage::getSingleton('core/resource');
//Retrieve the read connection
$readConnection = $resource->getConnection('core_read');
//Retrieve our table name
$table = $resource->getTableName('sales/order');
date_default_timezone_set('Europe/Lisbon');
$date = strtotime(date('Y-m-d H:i:s'));
$year = date('Y');
if(strtotime($year . '-01-01 00:00:00') <= $date && $date <= strtotime($year . '-03-31 00:00:00')){
$date_begin = $year . '-01-01 00:00:00';
$date_end = $year . '-03-31 00:00:00';
}else if(strtotime($year . '-04-01 00:00:00') <= $date && $date <= strtotime($year . '-06-30 00:00:00')){
$date_begin = $year . '-04-01 00:00:00';
$date_end = $year . '-06-30 00:00:00';
}else if(strtotime($year . '-07-01 00:00:00') <= $date && $date <= strtotime($year . '-09-31 00:00:00')){
$date_begin = $year . '-07-01 00:00:00';
$date_end = $year . '-09-31 00:00:00';
}else if(strtotime($year . '-10-01 00:00:00') <= $date && $date <= strtotime($year . '-12-30 00:00:00')){
$date_begin = $year . '-10-01 00:00:00';
$date_end = $year . '-12-30 00:00:00';
}
//query para ir buscar o total de compras feitas nesse trimestre
$total_quadrante = $readConnection->fetchAll('SELECT base_subtotal FROM ' . $table
. ' WHERE '
. ' customer_id = ' . (int)$customerId
. ' AND (created_at BETWEEN '
. '"' . $date_begin . '"'
. ' AND '
. '"' . $date_end . '"' . ')');
$gasto = 0;
foreach($total_quadrante as $child) {
$gasto += $child['base_subtotal'];
}
$totals = Mage::getSingleton('checkout/session')->getQuote()->getTotals();
$subtotal = $totals["subtotal"]->getValue(); //Subtotal value sem portes
$max = (float)$this->_helper->getSingleOrderTopAmount();
$max = $max+1; //+1 para ser possivel fazer compras até 60€ inclusive
$restante = $max - $gasto; //valor disponivel para o cliente gastar nesse trimestre
if ($subtotal > $restante) {
$formattedPrice = Mage::helper('core')->currency($this->_helper->getSingleOrderTopAmount(), true, false);
Mage::getSingleton('checkout/session')->addError(
$this->_helper->__($this->_helper->getSingleOrderTopAmountMsg(), $formattedPrice));
Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
Mage::app()->getResponse()->sendResponse();
exit;
}
}
{
if (!$this->_helper->isModuleEnabled()) {
return;
}
$quote = $observer->getEvent()->getQuote();
//Get current customer ID
$customerId = Mage::getSingleton('customer/session')->getCustomer()->getId();
//Get the resource model
$resource = Mage::getSingleton('core/resource');
//Retrieve the read connection
$readConnection = $resource->getConnection('core_read');
//Retrieve our table name
$table = $resource->getTableName('sales/order');
date_default_timezone_set('Europe/Lisbon');
$date = strtotime(date('Y-m-d H:i:s'));
$year = date('Y');
if(strtotime($year . '-01-01 00:00:00') <= $date && $date <= strtotime($year . '-03-31 00:00:00')){
$date_begin = $year . '-01-01 00:00:00';
$date_end = $year . '-03-31 00:00:00';
}else if(strtotime($year . '-04-01 00:00:00') <= $date && $date <= strtotime($year . '-06-30 00:00:00')){
$date_begin = $year . '-04-01 00:00:00';
$date_end = $year . '-06-30 00:00:00';
}else if(strtotime($year . '-07-01 00:00:00') <= $date && $date <= strtotime($year . '-09-31 00:00:00')){
$date_begin = $year . '-07-01 00:00:00';
$date_end = $year . '-09-31 00:00:00';
}else if(strtotime($year . '-10-01 00:00:00') <= $date && $date <= strtotime($year . '-12-30 00:00:00')){
$date_begin = $year . '-10-01 00:00:00';
$date_end = $year . '-12-30 00:00:00';
}
//query para ir buscar o total de compras feitas nesse trimestre
$total_quadrante = $readConnection->fetchAll('SELECT base_subtotal FROM ' . $table
. ' WHERE '
. ' customer_id = ' . (int)$customerId
. ' AND (created_at BETWEEN '
. '"' . $date_begin . '"'
. ' AND '
. '"' . $date_end . '"' . ')');
$gasto = 0;
foreach($total_quadrante as $child) {
$gasto += $child['base_subtotal'];
}
$totals = Mage::getSingleton('checkout/session')->getQuote()->getTotals();
$subtotal = $totals["subtotal"]->getValue(); //Subtotal value sem portes
$max = (float)$this->_helper->getSingleOrderTopAmount();
$max = $max+1; //+1 para ser possivel fazer compras até 60€ inclusive
$restante = $max - $gasto; //valor disponivel para o cliente gastar nesse trimestre
if ($subtotal > $restante) {
$formattedPrice = Mage::helper('core')->currency($this->_helper->getSingleOrderTopAmount(), true, false);
Mage::getSingleton('checkout/session')->addError(
$this->_helper->__($this->_helper->getSingleOrderTopAmountMsg(), $formattedPrice));
Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
Mage::app()->getResponse()->sendResponse();
exit;
}
}
até ai tudo bem, mas a partir do momento em que se está a aproximar do valor o botao de submeter compra quando se clica fica a pensar e não sai dali.
O que poderá ser ?