// New profitability calculation

This commit is contained in:
Damien Metzger
2013-10-22 11:39:57 +02:00
parent d8d9436f51
commit 16cf10d586
3 changed files with 159 additions and 93 deletions
+30 -45
View File
@@ -404,61 +404,46 @@ class CarrierCore extends ObjectModel
*/
public static function getCarriers($id_lang, $active = false, $delete = false, $id_zone = false, $ids_group = null, $modules_filters = self::PS_CARRIERS_ONLY)
{
if (!Validate::isBool($active))
die(Tools::displayError());
if ($ids_group)
{
$ids = '';
foreach ($ids_group as $id)
$ids .= (int)$id.', ';
$ids = rtrim($ids, ', ');
if ($ids == '')
return array();
}
// Filter by groups and no groups => return empty array
if ($ids_group && (!is_array($ids_group) || !count($ids_group)))
return array();
$sql = '
SELECT c.*, cl.delay
FROM `'._DB_PREFIX_.'carrier` c
LEFT JOIN `'._DB_PREFIX_.'carrier_lang` cl ON (c.`id_carrier` = cl.`id_carrier` AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').')
LEFT JOIN `'._DB_PREFIX_.'carrier_zone` cz ON (cz.`id_carrier` = c.`id_carrier`)'.
($id_zone ? 'LEFT JOIN `'._DB_PREFIX_.'zone` z ON (z.`id_zone` = '.(int)$id_zone.')' : '').'
'.Shop::addSqlAssociation('carrier', 'c').'
WHERE c.`deleted` = '.($delete ? '1' : '0');
if ($active)
$sql .= ' AND c.`active` = 1 ';
if ($id_zone)
$sql .= ' AND cz.`id_zone` = '.(int)$id_zone.' AND z.`active` = 1 ';
if ($ids_group)
$sql .= ' AND c.id_carrier IN (SELECT id_carrier FROM '._DB_PREFIX_.'carrier_group WHERE id_group IN ('.implode(',', array_map('intval', $ids_group)).')) ';
$sql = 'SELECT c.*, cl.delay
FROM `'._DB_PREFIX_.'carrier` c
LEFT JOIN `'._DB_PREFIX_.'carrier_lang` cl ON (c.`id_carrier` = cl.`id_carrier` AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').')
LEFT JOIN `'._DB_PREFIX_.'carrier_zone` cz ON (cz.`id_carrier` = c.`id_carrier`)'.
($id_zone ? 'LEFT JOIN `'._DB_PREFIX_.'zone` z ON (z.`id_zone` = '.(int)$id_zone.')' : '').'
'.Shop::addSqlAssociation('carrier', 'c').'
WHERE c.`deleted` = '.($delete ? '1' : '0').
($active ? ' AND c.`active` = 1' : '').
($id_zone ? ' AND cz.`id_zone` = '.(int)$id_zone.'
AND z.`active` = 1 ' : ' ');
switch ($modules_filters)
{
case 1 :
$sql .= 'AND c.is_module = 0 ';
break;
$sql .= ' AND c.is_module = 0 ';
break;
case 2 :
$sql .= 'AND c.is_module = 1 ';
break;
$sql .= ' AND c.is_module = 1 ';
break;
case 3 :
$sql .= 'AND c.is_module = 1 AND c.need_range = 1 ';
break;
$sql .= ' AND c.is_module = 1 AND c.need_range = 1 ';
break;
case 4 :
$sql .= 'AND (c.is_module = 0 OR c.need_range = 1) ';
break;
case 5 :
$sql .= '';
break;
$sql .= ' AND (c.is_module = 0 OR c.need_range = 1) ';
break;
}
$sql .= ($ids_group ? ' AND c.id_carrier IN (SELECT id_carrier FROM '._DB_PREFIX_.'carrier_group WHERE id_group IN ('.$ids.')) ' : '').'
GROUP BY c.`id_carrier`
ORDER BY c.`position` ASC';
$sql .= ' GROUP BY c.`id_carrier` ORDER BY c.`position` ASC';
$carriers = Db::getInstance()->executeS($sql);
if (is_array($carriers) && count($carriers))
{
foreach ($carriers as $key => $carrier)
if ($carrier['name'] == '0')
$carriers[$key]['name'] = Configuration::get('PS_SHOP_NAME');
}
else
$carriers = array();
foreach ($carriers as $key => $carrier)
if ($carrier['name'] == '0')
$carriers[$key]['name'] = Configuration::get('PS_SHOP_NAME');
return $carriers;
}