diff --git a/application/helpers/locale_helper.php b/application/helpers/locale_helper.php
index 9dba8b498..f530f860d 100644
--- a/application/helpers/locale_helper.php
+++ b/application/helpers/locale_helper.php
@@ -457,6 +457,50 @@ function dateformat_momentjs($php_format)
return strtr($php_format, $SYMBOLS_MATCHING);
}
+function dateformat_mysql()
+{
+ $config = get_instance()->config;
+ $php_format = $config->item('dateformat') . ' ' . $config->item('timeformat');
+
+ $SYMBOLS_MATCHING = array(
+ // Day
+ 'd' => '%d',
+ 'D' => '%a',
+ 'j' => '%e',
+ 'l' => '%W',
+ 'N' => '',
+ 'S' => '',
+ 'w' => '',
+ 'z' => '',
+ // Week
+ 'W' => '',
+ // Month
+ 'F' => '',
+ 'm' => '%m',
+ 'M' => '%b',
+ 'n' => '%c',
+ 't' => '',
+ // Year
+ 'L' => '',
+ 'o' => '',
+ 'Y' => '%Y',
+ 'y' => '%y',
+ // Time
+ 'a' => '',
+ 'A' => '%p',
+ 'B' => '',
+ 'g' => '%l',
+ 'G' => '%k',
+ 'h' => '',
+ 'H' => '%k',
+ 'i' => '%i',
+ 's' => '%S',
+ 'u' => '%f'
+ );
+
+ return strtr($php_format, $SYMBOLS_MATCHING);
+}
+
function dateformat_bootstrap($php_format)
{
$SYMBOLS_MATCHING = array(
diff --git a/application/helpers/tabular_helper.php b/application/helpers/tabular_helper.php
index ef8e298f8..a3107c286 100644
--- a/application/helpers/tabular_helper.php
+++ b/application/helpers/tabular_helper.php
@@ -90,7 +90,7 @@ function get_sale_data_row($sale)
$row = array (
'sale_id' => $sale->sale_id,
- 'sale_time' => date($CI->config->item('dateformat') . ' ' . $CI->config->item('timeformat'), strtotime($sale->sale_time)),
+ 'sale_time' => to_datetime(strtotime($sale->sale_time)),
'customer_name' => $sale->customer_name,
'amount_due' => to_currency($sale->amount_due),
'amount_tendered' => to_currency($sale->amount_tendered),
@@ -444,6 +444,7 @@ function get_item_data_row($item)
);
$attribute_values = (property_exists($item, 'attribute_values')) ? $item->attribute_values : "";
+ $attribute_values = (property_exists($item, 'attribute_datetimevalues')) ? $item->attribute_datetimevalues : $attribute_values;
return $columns + expand_attribute_values($definition_names, $attribute_values) + $icons;
}
@@ -529,7 +530,7 @@ function expand_attribute_values($definition_names, $attribute_values)
$indexed_values = array();
foreach($values as $attribute_value)
{
- $exploded_value = explode(':', $attribute_value);
+ $exploded_value = explode('_', $attribute_value);
$indexed_values[$exploded_value[0]] = isset($exploded_value[1]) ? $exploded_value[1] : '-';
}
@@ -651,7 +652,7 @@ function get_expenses_data_row($expense)
$controller_name = strtolower(get_class($CI));
return array (
'expense_id' => $expense->expense_id,
- 'date' => date($CI->config->item('dateformat') . ' ' . $CI->config->item('timeformat'), strtotime($expense->date)),
+ 'date' => to_datetime(strtotime($expense->date)),
'supplier_name' => $expense->supplier_name,
'supplier_tax_code' => $expense->supplier_tax_code,
'amount' => to_currency($expense->amount),
@@ -742,11 +743,11 @@ function get_cash_up_data_row($cash_up)
$controller_name = strtolower(get_class($CI));
return array (
'cashup_id' => $cash_up->cashup_id,
- 'open_date' => date($CI->config->item('dateformat') . ' ' . $CI->config->item('timeformat'), strtotime($cash_up->open_date)),
+ 'open_date' => to_datetime(strtotime($cash_up->open_date)),
'open_employee_id' => $cash_up->open_first_name . ' ' . $cash_up->open_last_name,
'open_amount_cash' => to_currency($cash_up->open_amount_cash),
'transfer_amount_cash' => to_currency($cash_up->transfer_amount_cash),
- 'close_date' => date($CI->config->item('dateformat') . ' ' . $CI->config->item('timeformat'), strtotime($cash_up->close_date)),
+ 'close_date' => to_datetime(strtotime($cash_up->close_date)),
'close_employee_id' => $cash_up->close_first_name . ' ' . $cash_up->close_last_name,
'closed_amount_cash' => to_currency($cash_up->closed_amount_cash),
'note' => $cash_up->note ? '' : '',
diff --git a/application/models/Attribute.php b/application/models/Attribute.php
index f02f88be5..65d62b35b 100644
--- a/application/models/Attribute.php
+++ b/application/models/Attribute.php
@@ -105,9 +105,9 @@ class Attribute extends CI_Model
*/
public function search($search, $rows = 0, $limit_from = 0, $sort = 'definition.definition_name', $order = 'asc')
{
- $this->db->select('definition_group.definition_name AS definition_group, definition.*');
+ $this->db->select('parent_definition.definition_name AS definition_group, definition.*');
$this->db->from('attribute_definitions AS definition');
- $this->db->join('attribute_definitions AS definition_group', 'definition_group.definition_id = definition.definition_fk', 'left');
+ $this->db->join('attribute_definitions AS parent_definition', 'parent_definition.definition_id = definition.definition_fk', 'left');
$this->db->group_start();
$this->db->like('definition.definition_name', $search);
@@ -452,7 +452,9 @@ class Attribute extends CI_Model
public function get_link_values($item_id, $sale_receiving_fk, $id, $definition_flags)
{
- $this->db->select('GROUP_CONCAT(attribute_value SEPARATOR ", ") AS attribute_values, GROUP_CONCAT(attribute_datetime SEPARATOR ", ") AS attribute_datetimevalues');
+ $format = $this->db->escape(dateformat_mysql());
+ $this->db->select('GROUP_CONCAT(attribute_value SEPARATOR ', ') AS attribute_values');
+ $this->db->select("GROUP_CONCAT(DATE_FORMAT(attribute_datetime, $format) SEPARATOR ', ') AS attribute_datetimevalues");
$this->db->from('attribute_links');
$this->db->join('attribute_values', 'attribute_values.attribute_id = attribute_links.attribute_id');
$this->db->join('attribute_definitions', 'attribute_definitions.definition_id = attribute_links.definition_id');
@@ -471,23 +473,7 @@ class Attribute extends CI_Model
$this->db->where('item_id', (int) $item_id);
$this->db->where('definition_flags & ', $definition_flags);
- $results = $this->db->get();
-
- if ($results->num_rows() > 0)
- {
- $row_object = $results->row_object();
-
- $datetime_values = explode(', ', $row_object->attribute_datetimevalues);
- $attribute_values = array();
-
- foreach (array_filter($datetime_values) as $datetime_value)
- {
- $attribute_values[] = to_datetime(strtotime($datetime_value));
- }
-
- return implode(',', $attribute_values) . $row_object->attribute_values;
- }
- return "";
+ return $this->db->get();
}
public function get_attribute_value($item_id, $definition_id)
diff --git a/application/models/Item.php b/application/models/Item.php
index d7b469b37..adddb9a5e 100644
--- a/application/models/Item.php
+++ b/application/models/Item.php
@@ -192,7 +192,9 @@ class Item extends CI_Model
if ($attributes_enabled)
{
- $this->db->select('GROUP_CONCAT(DISTINCT CONCAT_WS(\':\', definition_id, attribute_value) ORDER BY definition_id SEPARATOR \'|\') AS attribute_values');
+ $format = $this->db->escape(dateformat_mysql());
+ $this->db->select('GROUP_CONCAT(DISTINCT CONCAT_WS(\'_\', definition_id, attribute_value) ORDER BY definition_id SEPARATOR \'|\') AS attribute_values');
+ $this->db->select("GROUP_CONCAT(DISTINCT CONCAT_WS('_', definition_id, DATE_FORMAT(attribute_datetime, $format)) SEPARATOR '|') AS attribute_datetimevalues");
$this->db->join('attribute_links', 'attribute_links.item_id = items.item_id AND attribute_links.receiving_id IS NULL AND attribute_links.sale_id IS NULL AND definition_id IN (' . implode(',', $filters['definition_ids']) . ')', 'left');
$this->db->join('attribute_values', 'attribute_values.attribute_id = attribute_links.attribute_id', 'left');
}
diff --git a/application/views/attributes/form.php b/application/views/attributes/form.php
index 33bc3977f..66a9e8a5b 100644
--- a/application/views/attributes/form.php
+++ b/application/views/attributes/form.php
@@ -181,7 +181,7 @@ $(document).ready(function()
});
$.validator.addMethod('valid_chars', function(value, element) {
- return value.match(/(\||:)/g) == null;
+ return value.match(/(\||_)/g) == null;
}, "lang->line('attributes_attribute_value_invalid_chars'); ?>");
$('#attribute_form').validate($.extend({