/**
* @param string $type order | receipt | invoice
* @param $orderId
* @param mixed $date
* @return int|mixed
*
* Defines which numbers will be used, if set by auto increment or by year or by month
* Example: auto increment can be 1250 but it is new year so based on year the number will be 1 (even autoincrement will be 1251)
* Number can start each month/year at 1 because of accounting ... be aware the numbers need to include prefixes
*/
public static function getNumberId($type = 'order', $orderId = 0, $date = false)
{
$paramsC = PhocacartUtils::getComponentParameters();
switch ($type) {
case 'invoice':
$creating_numbers = $paramsC->get('invoice_creating_numbers', 'A');
$column = 'invoice_number_id';
break;
case 'receipt':
$creating_numbers = $paramsC->get('receipt_creating_numbers', 'A');
$column = 'receipt_number_id';
break;
case 'queue':
$creating_numbers = $paramsC->get('queue_creating_numbers', 'A');
$column = 'queue_number_id';
break;
case 'order':
default:
$creating_numbers = $paramsC->get('order_creating_numbers', 'A');
$column = 'order_number_id';
break;
}
switch ($creating_numbers) {
case 'Y':
// Yearly based
$date = !$date ? self::getOrderDate($orderId) : $date;
$time = strtotime($date);
$year = date("Y", $time);
$db = Factory::getDBO();
$query = ' SELECT MAX(' . $column . ') FROM #__phocacart_orders WHERE YEAR(date) = ' . (int) $year . ' ORDER BY date LIMIT 1';
$db->setQuery($query);
$id = $db->loadResult();
if (!$id || $id == 0) {
return 1;
} else {
$id++;
return $id;
}
break;
case 'M':
// Montly based
$date = !$date ? self::getOrderDate($orderId) : $date;
$time = strtotime($date);
$year = date("Y", $time);
$month = date("m", $time);
$db = Factory::getDBO();
$query = ' SELECT MAX(' . $column . ') FROM #__phocacart_orders WHERE YEAR(date) = ' . (int) $year . ' AND MONTH(date) = ' . (int) $month . ' ORDER BY date LIMIT 1';
$db->setQuery($query);
$id = $db->loadResult();
if (!$id || $id == 0) {
return 1;
} else {
$id++;
return $id;
}
break;
case 'D':
// Daily based
$date = !$date ? self::getOrderDate($orderId) : $date;
$time = strtotime($date);
$year = date("Y", $time);
$month = date("m", $time);
$day = date("d", $time);
$db = Factory::getDBO();
$query = ' SELECT MAX(' . $column . ') FROM #__phocacart_orders WHERE YEAR(date) = ' . (int) $year . ' AND MONTH(date) = ' . (int) $month . ' AND DAY(date) = ' . (int) $day . ' ORDER BY date LIMIT 1';
$db->setQuery($query);
$id = $db->loadResult();
if (!$id || $id == 0) {
return 1;
} else {
$id++;
return $id;
}
break;
case 'A':
default:
// OrderId stay autoincrement
return $orderId;
break;
}
}