diff --git a/.gitignore b/.gitignore index 1ce5a940a..e321dc105 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ git-svn-diff.py *.rej *.orig *~ +uploads/ diff --git a/application/controllers/items.php b/application/controllers/items.php index 3c3b2345a..5c56db4af 100644 --- a/application/controllers/items.php +++ b/application/controllers/items.php @@ -302,6 +302,8 @@ class Items extends Secure_area implements iData_controller function save($item_id=-1) { + $upload_success = $this->_handle_image_upload(); + $upload_data = $this->upload->data(); //Save item data $item_data = array( 'name'=>$this->input->post('name'), @@ -328,25 +330,24 @@ class Items extends Secure_area implements iData_controller 'custom10'=>$this->input->post('custom10')/**GARRISON ADDED 4/21/2013**/ ); + if (!empty($upload_data['raw_name'])) + { + $item_data['pic_id'] = $upload_data['raw_name']; + } + $employee_id=$this->Employee->get_logged_in_employee_info()->person_id; $cur_item_info = $this->Item->get_info($item_id); - $new_item = FALSE; if($this->Item->save($item_data,$item_id)) { + $success = TRUE; + $new_item = FALSE; //New item if($item_id==-1) { - echo json_encode(array('success'=>true,'message'=>$this->lang->line('items_successful_adding').' '. - $item_data['name'],'item_id'=>$item_data['item_id'])); $item_id = $item_data['item_id']; $new_item = TRUE; } - else //previous item - { - echo json_encode(array('success'=>true,'message'=>$this->lang->line('items_successful_updating').' '. - $item_data['name'],'item_id'=>$item_id)); - } $items_taxes_data = array(); $tax_names = $this->input->post('tax_names'); @@ -358,7 +359,7 @@ class Items extends Secure_area implements iData_controller $items_taxes_data[] = array('name'=>$tax_names[$k], 'percent'=>$tax_percents[$k] ); } } - $this->Item_taxes->save($items_taxes_data, $item_id); + $success &= $this->Item_taxes->save($items_taxes_data, $item_id); //Save item quantity @@ -372,7 +373,7 @@ class Items extends Secure_area implements iData_controller $item_quantity = $this->Item_quantities->get_item_quantity($item_id, $location_data['location_id']); if ($item_quantity->quantity != $updated_quantity || $new_item) { - $this->Item_quantities->save($location_detail, $item_id, $location_data['location_id']); + $success &= $this->Item_quantities->save($location_detail, $item_id, $location_data['location_id']); $inv_data = array ( @@ -383,18 +384,50 @@ class Items extends Secure_area implements iData_controller 'trans_comment'=>$this->lang->line('items_manually_editing_of_quantity'), 'trans_inventory'=>$updated_quantity - $item_quantity->quantity ); - $this->Inventory->insert($inv_data); + $success &= $this->Inventory->insert($inv_data); } } + + if ($success && $upload_success) + { + $success_message = $this->lang->line('items_successful_' . ($new_item ? 'adding' : 'updating')) .' '. $item_data['name']; + echo json_encode(array('success'=>true,'message'=>$success_message,'item_id'=>$item_id)); + } + else + { + $error_message = $upload_success ? + $this->lang->line('items_error_adding_updating') .' '. $item_data['name'] : + $this->upload->display_errors(); + echo json_encode(array('success'=>false,'message'=>$error_message,'item_id'=>$item_id)); + } + } else//failure { echo json_encode(array('success'=>false,'message'=>$this->lang->line('items_error_adding_updating').' '. - $item_data['name'],'item_id'=>-1)); + $item_data['name'],'item_id'=>-1)); } } + function _handle_image_upload() + { + $this->load->helper('directory'); + $map = directory_map('./uploads/item_pics/', 1); + // load upload library + $config = array('upload_path' => './uploads/item_pics/', + 'allowed_types' => 'gif|jpg|png', + 'max_size' => '100', + 'max_width' => '640', + 'max_height' => '480', + 'file_name' => sizeof($map)); + $this->load->library('upload', $config); + $this->upload->do_upload('item_image'); + return strlen($this->upload->display_errors()) == 0 || + !strcmp($this->upload->display_errors(), + '

'.$this->lang->line('upload_no_file_selected').'

'); + } + //Ramel Inventory Tracking function save_inventory($item_id=-1) { @@ -668,7 +701,7 @@ class Items extends Secure_area implements iData_controller */ function get_form_width() { - return 360; + return 400; } function item_number_check($item_number) diff --git a/application/helpers/table_helper.php b/application/helpers/table_helper.php index 6ecb80354..e1cdf1b52 100644 --- a/application/helpers/table_helper.php +++ b/application/helpers/table_helper.php @@ -162,7 +162,8 @@ function get_items_manage_table($items,$controller) $CI->lang->line('items_quantity'), $CI->lang->line('items_tax_percents'), ' ', - $CI->lang->line('items_inventory') + ' ', + ' ' ); $table.=''; @@ -191,7 +192,7 @@ function get_items_manage_table_data_rows($items,$controller) if($items->num_rows()==0) { - $table_data_rows.="
".$CI->lang->line('items_no_items_to_display')."
"; + $table_data_rows.="
".$CI->lang->line('items_no_items_to_display')."
"; } return $table_data_rows; @@ -220,7 +221,17 @@ function get_item_data_row($item,$controller) $table_data_row.=''.to_currency($item->cost_price).''; $table_data_row.=''.to_currency($item->unit_price).''; $table_data_row.=''.$item->quantity.''; - $table_data_row.=''.$tax_percents.''; + $table_data_row.=''.$tax_percents.''; + $image = ''; + if (!empty($item->pic_id)) + { + $images = glob ("uploads/item_pics/" . $item->pic_id . ".*"); + if (sizeof($images) > 0) + { + $image.=''; + } + } + $table_data_row.='' . $image . ''; $table_data_row.=''.anchor($controller_name."/view/$item->item_id/width:$width", $CI->lang->line('common_edit'),array('class'=>'thickbox','title'=>$CI->lang->line($controller_name.'_update'))).''; //Ramel Inventory Tracking diff --git a/application/language/en/items_lang.php b/application/language/en/items_lang.php index fd8c6473d..cd740d9fd 100644 --- a/application/language/en/items_lang.php +++ b/application/language/en/items_lang.php @@ -79,3 +79,4 @@ $lang["items_unit_price_required"] = "Retail Price is a required field"; $lang["items_upc_database"] = "UPC Database"; $lang["items_update"] = "Update Item"; $lang["items_use_inventory_menu"] = "Use Inv. Menu"; +$lang["items_image"] = "Avatar"; diff --git a/application/language/es/items_lang.php b/application/language/es/items_lang.php index 0a0b51f8b..52724bfb2 100644 --- a/application/language/es/items_lang.php +++ b/application/language/es/items_lang.php @@ -79,3 +79,4 @@ $lang["items_unit_price_required"] = "Precio de Venta es requerido"; $lang["items_upc_database"] = "Base de datos UPC"; $lang["items_update"] = "Actualizar Artículo"; $lang["items_use_inventory_menu"] = "Usar Menú de Inventario"; +$lang["items_image"] = ""; diff --git a/application/language/fr/items_lang.php b/application/language/fr/items_lang.php index fc0ab0cfb..959b5b265 100644 --- a/application/language/fr/items_lang.php +++ b/application/language/fr/items_lang.php @@ -79,3 +79,4 @@ $lang["items_unit_price_required"] = "Le Prix de revente est requis"; $lang["items_upc_database"] = "Base de Données UPC"; $lang["items_update"] = "Éditer Item"; $lang["items_use_inventory_menu"] = "Utiliser Menu Inv."; +$lang["items_image"] = ""; diff --git a/application/language/id/items_lang.php b/application/language/id/items_lang.php index ac3483448..b0142902b 100644 --- a/application/language/id/items_lang.php +++ b/application/language/id/items_lang.php @@ -79,3 +79,4 @@ $lang["items_unit_price_required"] = "Harga Jual wajib diisi"; $lang["items_upc_database"] = "Database UPC"; $lang["items_update"] = "Ubah"; $lang["items_use_inventory_menu"] = "Gunakan Inv. Menu"; +$lang["items_image"] = ""; diff --git a/application/language/nl-BE/items_lang.php b/application/language/nl-BE/items_lang.php index 5297919e9..7ddf9778f 100755 --- a/application/language/nl-BE/items_lang.php +++ b/application/language/nl-BE/items_lang.php @@ -79,3 +79,4 @@ $lang["items_unit_price_required"] = "Verkoopprijs moet ingevuld worden"; $lang["items_upc_database"] = "UPC Database"; $lang["items_update"] = "Bewerk Product"; $lang["items_use_inventory_menu"] = "Use Inv. Menu"; +$lang["items_image"] = "Afbeelding"; diff --git a/application/language/ru/items_lang.php b/application/language/ru/items_lang.php index 4f2e32216..eba522d8a 100644 --- a/application/language/ru/items_lang.php +++ b/application/language/ru/items_lang.php @@ -79,3 +79,4 @@ $lang["items_unit_price_required"] = "Розничная цена обязате $lang["items_upc_database"] = "UPC база данных"; $lang["items_update"] = "Обновить Товар"; $lang["items_use_inventory_menu"] = "Используйте меню инвентаря"; +$lang["items_image"] = ""; diff --git a/application/language/th/items_lang.php b/application/language/th/items_lang.php index 4fe7187b9..f4b3332ac 100644 --- a/application/language/th/items_lang.php +++ b/application/language/th/items_lang.php @@ -79,3 +79,4 @@ $lang["items_unit_price_required"] = "ราคาต่อหน่วยต้ $lang["items_upc_database"] = "UPC ฐานข้อมูล"; $lang["items_update"] = "ปรับแต่งสินค้า"; $lang["items_use_inventory_menu"] = "ใช้เมนูสินค้าคงเหลือ"; +$lang["items_image"] = ""; diff --git a/application/language/tr/items_lang.php b/application/language/tr/items_lang.php index f6e4d36e5..87830bd27 100644 --- a/application/language/tr/items_lang.php +++ b/application/language/tr/items_lang.php @@ -79,3 +79,4 @@ $lang["items_unit_price_required"] = "Satış Fiyatı zorunlu alandır"; $lang["items_upc_database"] = "UPC Veritabanı"; $lang["items_update"] = "Ürün Güncelle"; $lang["items_use_inventory_menu"] = "Stok Menüsünü Kullan"; +$lang["items_image"] = ""; diff --git a/application/language/zh/items_lang.php b/application/language/zh/items_lang.php index 0298041ab..f3ad71888 100755 --- a/application/language/zh/items_lang.php +++ b/application/language/zh/items_lang.php @@ -79,3 +79,4 @@ $lang["items_unit_price_required"] = "單價為必填欄位"; $lang["items_upc_database"] = "UPC Database"; $lang["items_update"] = "更新產品"; $lang["items_use_inventory_menu"] = "使用庫存清單"; +$lang["items_image"] = ""; diff --git a/application/models/item_taxes.php b/application/models/item_taxes.php index 18033baa7..badc43b7a 100644 --- a/application/models/item_taxes.php +++ b/application/models/item_taxes.php @@ -21,15 +21,15 @@ class Item_taxes extends CI_Model $this->db->trans_start(); $this->delete($item_id); - + $result = TRUE; foreach ($items_taxes_data as $row) { $row['item_id'] = $item_id; - $this->db->insert('items_taxes',$row); + $result &= $this->db->insert('items_taxes',$row); } $this->db->trans_complete(); - return true; + return $result; } function save_multiple(&$items_taxes_data, $item_ids) diff --git a/application/views/items/form.php b/application/views/items/form.php index 37cd6466d..5313bb009 100644 --- a/application/views/items/form.php +++ b/application/views/items/form.php @@ -1,7 +1,7 @@
lang->line('common_fields_required_message'); ?>
item_id,array('id'=>'item_form')); +echo form_open('items/save/'.$item_info->item_id,array('id'=>'item_form', 'enctype'=>'multipart/form-data')); ?>
lang->line("items_basic_information"); ?> @@ -170,6 +170,13 @@ foreach($stock_locations as $key=>$location_detail) +
+lang->line('items_image').':', 'item_image',array('class'=>'wide')); ?> +
+ +
+
+
lang->line('items_allow_alt_description').':', 'allow_alt_description',array('class'=>'wide')); ?>
@@ -365,8 +372,8 @@ if($this->config->item('custom10_name') != NULL) 'submit', - 'id'=>'submit', + 'name'=>'submit_form', + 'id'=>'submit_form', 'value'=>$this->lang->line('common_submit'), 'class'=>'submit_button float_right') ); diff --git a/application/views/items/manage.php b/application/views/items/manage.php index 5a0abbee2..ea398e763 100644 --- a/application/views/items/manage.php +++ b/application/views/items/manage.php @@ -22,12 +22,45 @@ $(document).ready(function() $(this).attr('href','index.php/items/generate_barcodes/'+selected.join(':')); }); - $("#is_serialized, #no_description, #search_custom, #is_deleted").click(function() + $('#is_serialized, #no_description, #search_custom, #is_deleted').click(function() { $('#items_filter_form').submit(); }); + + resize_thumbs(); }); +function resize_thumbs() +{ + $('a.rollover').imgPreview(); + $('a.rollover img').each(function() + { + var maxWidth = 52; // Max width for the image + var maxHeight = 32; // Max height for the image + var ratio = 0; // Used for aspect ratio + var width = $(this).width(); // Current image width + var height = $(this).height(); // Current image height + + // Check if the current width is larger than the max + if(width > maxWidth){ + ratio = maxWidth / width; // get ratio for scaling image + $(this).css("width", maxWidth); // Set new width + $(this).css("height", height * ratio); // Scale height based on ratio + height = height * ratio; // Reset height to match scaled image + width = width * ratio; // Reset width to match scaled image + } + + // Check if current height is larger than max + if(height > maxHeight){ + ratio = maxHeight / height; // get ratio for scaling image + $(this).css("height", maxHeight); // Set new height + $(this).css("width", width * ratio); // Scale width based on ratio + width = width * ratio; // Reset width to match scaled image + height = height * ratio; // Reset height to match scaled image + } + }); +} + function init_table_sorting() { @@ -59,9 +92,8 @@ function post_item_form_submit(response) //This is an update, just update one row if(jQuery.inArray(response.item_id,get_visible_checkbox_ids()) != -1) { - update_row(response.item_id,''); + update_row(response.item_id,'',resize_thumbs); set_feedback(response.message,'success_message',false); - } else //refresh entire table { @@ -86,7 +118,7 @@ function post_bulk_form_submit(response) var selected_item_ids=get_selected_values(); for(k=0;k'); + update_row(selected_item_ids[k],'',resize_thumbs); } set_feedback(response.message,'success_message',false); } diff --git a/application/views/partial/header.php b/application/views/partial/header.php index 3f65a343f..56d292004 100644 --- a/application/views/partial/header.php +++ b/application/views/partial/header.php @@ -18,6 +18,7 @@ + diff --git a/application/views/sales/receipt.php b/application/views/sales/receipt.php index 629f33170..d66b13875 100644 --- a/application/views/sales/receipt.php +++ b/application/views/sales/receipt.php @@ -110,7 +110,7 @@ if (isset($error_message)) config->item('return_policy')); ?>
- "; ?> + "; ?>
load->view("partial/footer"); ?> diff --git a/css/general.css b/css/general.css index 41cd7ddfd..cb0d8443a 100644 --- a/css/general.css +++ b/css/general.css @@ -140,21 +140,6 @@ input padding: 3px; } -input#search -{ - padding: 0px; -} - -select#stock_location -{ - border: none; -} - -#select_customer_form input, #select_supplier_form input -{ - width: 95%; -} - .clearfix:after { content: "."; diff --git a/css/ospos.css b/css/ospos.css index fd7b16729..2da97e799 100644 --- a/css/ospos.css +++ b/css/ospos.css @@ -151,3 +151,23 @@ a.none clear:both; } + +input#search +{ + padding: 0px; +} + +select#stock_location +{ + border: none; +} + +#select_customer_form input, #select_supplier_form input +{ + width: 95%; +} + +a.rollover img +{ + padding: 3px; +} diff --git a/database/2.3.1_to_2.3.2.sql b/database/2.3.1_to_2.3.2.sql new file mode 100644 index 000000000..35c26c62e --- /dev/null +++ b/database/2.3.1_to_2.3.2.sql @@ -0,0 +1,19 @@ +INSERT INTO `ospos_app_config` (`key`, `value`) VALUES +('barcode_content', 'id'), +('barcode_first_row', 'category'), +('barcode_second_row', 'item_code'), +('barcode_third_row', 'cost_price'), +('barcode_num_in_row', '2'), +('barcode_page_width', '100'), +('barcode_page_cellspacing', '20'); + +INSERT INTO `ospos_permissions` (permission_id, module_id, location_id) +(SELECT CONCAT('sales_', location_name), 'sales', location_id FROM ospos_stock_locations); + +INSERT INTO `ospos_permissions` (permission_id, module_id, location_id) +(SELECT CONCAT('receivings_', location_name), 'receivings', location_id FROM ospos_stock_locations); + +-- add item_pic column to items table +ALTER TABLE `ospos_items` + ADD COLUMN `item_pic` int(10) DEFAULT NULL; + diff --git a/database/2.3_to_2.3.1.sql b/database/2.3_to_2.3.1.sql index a7f413649..2ba636e83 100644 --- a/database/2.3_to_2.3.1.sql +++ b/database/2.3_to_2.3.1.sql @@ -40,12 +40,6 @@ INSERT INTO `ospos_permissions` (`permission_id`, `module_id`) VALUES INSERT INTO `ospos_permissions` (permission_id, module_id, location_id) (SELECT CONCAT('items_', location_name), 'items', location_id FROM ospos_stock_locations); -INSERT INTO `ospos_permissions` (permission_id, module_id, location_id) -(SELECT CONCAT('sales_', location_name), 'sales', location_id FROM ospos_stock_locations); - -INSERT INTO `ospos_permissions` (permission_id, module_id, location_id) -(SELECT CONCAT('receivings_', location_name), 'receivings', location_id FROM ospos_stock_locations); - CREATE TABLE `ospos_grants` ( `permission_id` varchar(255) NOT NULL, `person_id` int(10) NOT NULL, @@ -88,21 +82,6 @@ INSERT INTO `ospos_app_config` (`key`, `value`) VALUES ('tax_included', '0'), ('recv_invoice_format', '$CO'), ('sales_invoice_format', '$CO'), -('barcode_content', 'id'), -('barcode_labels', ''), -('barcode_dpi', '72'), -('barcode_scale', '1'), -('barcode_rotation', 'no_rotation'), -('barcode_font', ''), -('barcode_font_size', ''), -('barcode_thickness', '20'), -('barcode_checksum', '0'), -('barcode_first_row', 'category'), -('barcode_second_row', 'item_code'), -('barcode_third_row', 'cost_price'), -('barcode_num_in_row', '2'), -('barcode_page_width', '100'), -('barcode_page_cellspacing', '20'); -- add invoice_number column to receivings table ALTER TABLE `ospos_receivings` diff --git a/database/database.sql b/database/database.sql index 4608d6dab..1690e5bc2 100644 --- a/database/database.sql +++ b/database/database.sql @@ -47,7 +47,6 @@ INSERT INTO `ospos_app_config` (`key`, `value`) VALUES ('barcode_quality', '100'), ('barcode_font', 'Arial'), ('barcode_font_size', '10'), -('barcode_checksum', '0'), ('barcode_first_row', 'category'), ('barcode_second_row', 'item_code'), ('barcode_third_row', 'cost_price'), @@ -55,7 +54,6 @@ INSERT INTO `ospos_app_config` (`key`, `value`) VALUES ('barcode_page_width', '100'), ('barcode_page_cellspacing', '20'); - -- -------------------------------------------------------- -- @@ -162,6 +160,7 @@ CREATE TABLE `ospos_items` ( `reorder_level` decimal(15,2) NOT NULL DEFAULT '0', `receiving_quantity` int(11) NOT NULL DEFAULT '1', `item_id` int(10) NOT NULL AUTO_INCREMENT, + `pic_id` int(10) DEFAULT NULL, `allow_alt_description` tinyint(1) NOT NULL, `is_serialized` tinyint(1) NOT NULL, `deleted` int(1) NOT NULL DEFAULT '0', diff --git a/js/imgpreview.full.jquery.js b/js/imgpreview.full.jquery.js new file mode 100644 index 000000000..c2f370342 --- /dev/null +++ b/js/imgpreview.full.jquery.js @@ -0,0 +1,109 @@ +/* + * imgPreview jQuery plugin + * Copyright (c) 2009 James Padolsey + * j@qd9.co.uk | http://james.padolsey.com + * Dual licensed under MIT and GPL. + * Updated: 09/02/09 + * @author James Padolsey + * @version 0.22 + */ +(function($){ + + $.expr[':'].linkingToImage = function(elem, index, match){ + // This will return true if the specified attribute contains a valid link to an image: + return !! ($(elem).attr(match[3]) && $(elem).attr(match[3]).match(/\.(gif|jpe?g|png|bmp)$/i)); + }; + + $.fn.imgPreview = function(userDefinedSettings){ + + var s = $.extend({ + + /* DEFAULTS */ + + // CSS to be applied to image: + imgCSS: {}, + // Distance between cursor and preview: + distanceFromCursor: {top:10, left:10}, + // Boolean, whether or not to preload images: + preloadImages: true, + // Callback: run when link is hovered: container is shown: + onShow: function(){}, + // Callback: container is hidden: + onHide: function(){}, + // Callback: Run when image within container has loaded: + onLoad: function(){}, + // ID to give to container (for CSS styling): + containerID: 'imgPreviewContainer', + // Class to be given to container while image is loading: + containerLoadingClass: 'loading', + // Prefix (if using thumbnails), e.g. 'thumb_' + thumbPrefix: '', + // Where to retrieve the image from: + srcAttr: 'href' + + }, userDefinedSettings), + + $container = $('
').attr('id', s.containerID) + .append('').hide() + .css('position','absolute') + .appendTo('body'), + + $img = $('img', $container).css(s.imgCSS), + + // Get all valid elements (linking to images / ATTR with image link): + $collection = this.filter(':linkingToImage(' + s.srcAttr + ')'); + + // Re-usable means to add prefix (from setting): + function addPrefix(src) { + return src.replace(/(\/?)([^\/]+)$/,'$1' + s.thumbPrefix + '$2'); + } + + if (s.preloadImages) { + (function(i){ + var tempIMG = new Image(), + callee = arguments.callee; + tempIMG.src = addPrefix($($collection[i]).attr(s.srcAttr)); + tempIMG.onload = function(){ + $collection[i + 1] && callee(i + 1); + }; + })(0); + } + + $collection + .mousemove(function(e){ + + $container.css({ + top: e.pageY + s.distanceFromCursor.top + 'px', + left: e.pageX + s.distanceFromCursor.left + 'px' + }); + + }) + .hover(function(){ + + var link = this; + $container + .addClass(s.containerLoadingClass) + .show(); + $img + .load(function(){ + $container.removeClass(s.containerLoadingClass); + $img.show(); + s.onLoad.call($img[0], link); + }) + .attr( 'src' , addPrefix($(link).attr(s.srcAttr)) ); + s.onShow.call($container[0], link); + + }, function(){ + + $container.hide(); + $img.unbind('load').attr('src','').hide(); + s.onHide.call($container[0], this); + + }); + + // Return full selection, not $collection! + return this; + + }; + +})(jQuery); \ No newline at end of file diff --git a/js/manage_tables.js b/js/manage_tables.js index ddc1e1504..e4fc35b91 100644 --- a/js/manage_tables.js +++ b/js/manage_tables.js @@ -282,7 +282,7 @@ function get_table_row(id) { return $element; } -function update_row(row_id,url) +function update_row(row_id,url,callback) { $.post(url, { 'row_id': row_id },function(response) { @@ -291,6 +291,7 @@ function update_row(row_id,url) row_to_update.replaceWith(response); reinit_row(row_id); hightlight_row(row_id); + callback && typeof(callback) == "function" && callback(); }); } diff --git a/system/language/en/upload_lang.php b/system/language/en/upload_lang.php index 4de9e9e74..49119df86 100644 --- a/system/language/en/upload_lang.php +++ b/system/language/en/upload_lang.php @@ -10,7 +10,7 @@ $lang['upload_stopped_by_extension'] = "The file upload was stopped by extension $lang['upload_no_file_selected'] = "You did not select a file to upload."; $lang['upload_invalid_filetype'] = "The filetype you are attempting to upload is not allowed."; $lang['upload_invalid_filesize'] = "The file you are attempting to upload is larger than the permitted size."; -$lang['upload_invalid_dimensions'] = "The image you are attempting to upload exceedes the maximum height or width."; +$lang['upload_invalid_dimensions'] = "The image you are attempting to upload exceeds the maximum height or width."; $lang['upload_destination_error'] = "A problem was encountered while attempting to move the uploaded file to the final destination."; $lang['upload_no_filepath'] = "The upload path does not appear to be valid."; $lang['upload_no_file_types'] = "You have not specified any allowed file types."; diff --git a/translations/items_lang.csv b/translations/items_lang.csv index 579570095..63cd7cbd2 100644 --- a/translations/items_lang.csv +++ b/translations/items_lang.csv @@ -78,3 +78,4 @@ "items_upc_database","UPC Database","Base de datos UPC","UPC Database","Base de Données UPC","UPC Database","UPC база данных","UPC ฐานข้อมูล","UPC Veritabanı","Database UPC" "items_update","Bewerk Product","Actualizar Artículo","Update Item","Éditer Item","更新產品","Обновить Товар","ปรับแต่งสินค้า","Ürün Güncelle","Ubah" "items_use_inventory_menu","Use Inv. Menu","Usar Menú de Inventario","Use Inv. Menu","Utiliser Menu Inv.","使用庫存清單","Используйте меню инвентаря","ใช้เมนูสินค้าคงเหลือ","Stok Menüsünü Kullan","Gunakan Inv. Menu" +items_image,Afbeelding,,Avatar,,,,,,