update option and menu export csv single

This commit is contained in:
Aung Myo
2018-03-16 17:41:30 +06:30
parent f0e81caad0
commit e956b54886
14 changed files with 84 additions and 183 deletions

View File

@@ -48,7 +48,6 @@ gem 'prawn'
gem 'prawn-table'
gem 'spreadsheet'
gem 'to_xls-rails'
#Reporting gem
#gem 'compendium'
#gem "cancan"
@@ -81,7 +80,6 @@ gem 'kaminari', '~> 1.0.1'
gem 'filterrific'
gem 'cancancan', '~> 1.10'
#pageless no need for current
# gem 'will_paginate'
# gem 'pageless-rails', github: 'rorlab/pageless-rails'
@@ -129,4 +127,4 @@ gem 'momentjs-rails' # for date-range selector
# gem 'bootstrap-datepicker-rails' # date picker
# gem 'jquery-datetimepicker-rails'
# gem 'select2-rails' # for multi-select and auto-complete select box
gem "chartkick" #chart lib
gem "chartkick" #chart lib

View File

@@ -180,7 +180,6 @@ $(function() {
image_path = "image/logo.png";
}
}
console.log(menu_items[field].options)
row = '<div class="card custom-card testimonial-card animated fadeInRight" style="height:100%;background-image:url(../../'+image_path+');background-repeat: no-repeat;">'
+'<div class="custom-card-head card-head row" style="line-height:14px;margin:0px;" style="">'
@@ -190,6 +189,7 @@ $(function() {
+JSON.stringify(menu_items[field].instances)+"' data-id = '"
+JSON.stringify(menu_items[field].attributes)+"' data-item = '"
+JSON.stringify(item_attributes)+"' data-option = '"
+JSON.stringify(menu_items[field].options)+"'data-opt = '"
+JSON.stringify(menu_items[field].options)+"' data-item-sets = '"
+JSON.stringify(menu_items[field].item_sets)+"' data-toggle='modal' data-target='."+data_target+"' >"
+"<i class='fa "+fa_plus+" '>"
@@ -202,6 +202,7 @@ $(function() {
+ price +"' data-instance-code = '"+ code +"' data-instance = '"
+ name +"' data-promotion-price = '"+ promotion_price +"' data-attributes = '"
+ JSON.stringify(item_attributes) +"' data-options = '"
+ JSON.stringify(menu_items[field].options) +"' data-opt = '"
+ JSON.stringify(menu_items[field].options) +"' data-image='"+image_path+"' data-toggle='"
+data_modal+"' data-target='."+data_target+"' data-item-sets = '"
+JSON.stringify(menu_items[field].item_sets)+"'data-instances = '"
@@ -296,7 +297,7 @@ $(function() {
$('.set-item').attr('data-code',instances[0]['code']);
$('.set-item').attr('data-name',instances[0]['name']);
$('.set-item').attr('data-price',instances[0]['price']);
// $('.set-item').attr('data-options','[]');
$('.set-item').attr('data-options','');
$('.set-item').attr('data-parent',true);
$('#set_change_qty').val(1);
@@ -351,6 +352,7 @@ $(function() {
sub_total = $('#set_total_price').text();
name = $(this).data('name');
price = $(this).data('price');
options = $(this).attr('data-options','');
// qty = $('#set_change_qty').val();
qty = document.getElementById("set_count").value;
total = qty*price;
@@ -379,14 +381,14 @@ $(function() {
item = get_set_item(items);
customer_display_view(item,"set_add");
var option = ''
attribute_arr = []
var rowCount = $('.summary-items tbody tr').length+1;
code = $('.set-item').attr('data-code');
name = $('.set-item').attr('data-name');
price = $('.set-item').attr('data-price');
option = $('.set-item').attr('data-options');
option = ($('.set-item').attr('data-options') === 'undefined') ? '' :$('.set-item').attr('data-options');
parent = $('.set-item').attr('data-parent');
total = qty * price ;
row ="<tr class='item_box' data-price ='"
@@ -396,7 +398,7 @@ $(function() {
+attribute_arr+"' data-options ='"
+option+"' data-row ='"+rowCount+ "' data-parent ='"+parent+ "'>"
+'<td class="item-cell-no">'+rowCount+'</td>'
+'<td class="item-cell-name" id="item_name" >' + item_name+ ' ' + name +'-' + option +'</td>'
+'<td class="item-cell-name" id="item_name" >' + item_name+ ' ' + name +' ' + option +'</td>'
+'<td class="item-cell-qty" id="item_qty">' + qty + '</td>'
+'<td class="item-cell-price" id="item_price">'
+ parseFloat(total).toFixed(2)
@@ -404,22 +406,23 @@ $(function() {
+'</tr>';
$(".summary-items tbody").append(row);
var rowCount = $('.summary-items tbody tr').length+1;
var set_option = ''
$(items).each(function(i){
code = $(items[i]).attr('data-code');
name = $(items[i]).attr('data-name');
price = $(items[i]).attr('data-price');
option = $(items[i]).attr('data-options');
set_option = ($(items[i]).attr('data-options') === 'undefined') ? ' ' :$(items[i]).attr('data-options');
sub_item = $(items[i]).attr('data-sub-item');
option = $(items[i]).attr('data-options');
total = qty * price ;
row ="<tr class='item_box' data-price ='"
+price+ "' data-toggle='modal' data-target='#sx_itemModal' 'data-instance ='"
+name+ "' data-code='"+item_code+"' data-instance-code='"
+code+"' data-attributes='"
+attribute_arr+"' data-options ='"
+option+"' data-row ='"+rowCount+ "' data-sub-item ='"+sub_item+ "'>"
+set_option+"' data-row ='"+rowCount+ "' data-sub-item ='"+sub_item+ "'>"
+'<td class="item-cell-no">'+rowCount+'</td>'
+'<td class="item-cell-name" id="item_name" >' + item_name+ ' ' + name +'-' + option +'</td>'
+'<td class="item-cell-name" id="item_name" >' + item_name+ ' ' + name +' ' + set_option +'</td>'
+'<td class="item-cell-qty" id="item_qty">' + qty + '</td>'
+'<td class="item-cell-price" id="item_price">'
+ parseFloat(total).toFixed(2)
@@ -659,7 +662,6 @@ $(function() {
attribute_arr = get_selected_attributes('selected-attribute');
option_arr = get_selected_attributes('selected-option');
if (item_row.length>0) {
var instances = jQuery.parseJSON(item_row.attr('data-instances'));
@@ -700,7 +702,7 @@ $(function() {
var item_data = $(this);
item = get_item(item_data);
customer_display_view(item,"add");
show_item_detail(item_data);
show_item_detail(item_data,"add_to_order");
calculate_sub_total();
}); //End add order Click
@@ -710,11 +712,11 @@ $(function() {
var item_data = $(this);
item = get_item(item_data);
customer_display_view(item,"add");
show_item_detail(item_data);
show_item_detail(item_data,"add_icon");
calculate_sub_total();
}); //End Add Icon Click
function show_item_detail(data){
function show_item_detail(data,click_type){
qty = parseInt(data.attr('data-qty'));
append = 0;
@@ -726,23 +728,26 @@ $(function() {
}else{
instance = "("+data.attr('data-instance')+")";
}
d_option = data.attr('data-options');
if (d_option){
option_name = "-"+data.attr('data-options');
d_option = data.attr('data-opt');
if (click_type != "add_icon"){
option_name = "-"+data.attr('data-options');
data_option = data.attr('data-options') ;
}else{
option_name = '';
option_name = ' ';
data_option = '[]';
}
var rowCount = $('.summary-items tbody tr').length+1;
var item_row = $('.summary-items tbody tr');
$(item_row).each(function(i){
item_code = $(item_row[i]).attr('data-code');
instance_code = $(item_row[i]).attr('data-instance-code');
r_option = $(item_row[i]).attr('data-options');
if (item_code == data.attr('data-item-code') && instance_code == data.attr('data-instance-code')&&r_option==d_option) {
r_option = $(item_row[i]).attr('data-opt');
console.log(r_option)
console.log(d_option)
if (item_code == data.attr('data-item-code') && instance_code == data.attr('data-instance-code')&&r_option == d_option) {
if (qty > 1) {
qty = parseInt($(item_row[i]).children('#item_qty').text()) + qty;
}else{
@@ -766,9 +771,10 @@ $(function() {
+instance+ "' data-code='"+data.attr('data-item-code')+"' data-instance-code='"
+data.attr('data-instance-code')+"' data-attributes='"
+data.attr('data-attributes')+"' data-options ='"
+data_option+"' data-opt ='"
+data.attr('data-options')+"' data-row ='"+rowCount+ "'>"
+'<td class="item-cell-no">'+rowCount+'</td>'
+'<td class="item-cell-name" id="item_name" >' + data.attr('data-name')+ ' ' + instance +' ' + option_name +'</td>'
+'<td class="item-cell-name" id="item_name" >' + data.attr('data-name')+ ' ' + instance +''+option_name+'</td>'
+'<td class="item-cell-qty" id="item_qty">' + qty + '</td>'
+'<td class="item-cell-price" id="item_price">'
+ parseFloat(price).toFixed(2)
@@ -822,8 +828,6 @@ $(function() {
data: params,
dataType: "json",
success:function(result){
console.log(type)
console.log(table_type)
if (type == "quick_service") {
window.location.href = "/origami/quick_service"
}else{
@@ -889,7 +893,7 @@ $(function() {
dataType: "json",
success:function(result){
if (result.status) {
console.log(result)
if (result.data == null){
swal({
title: "Please Open Shift !",

View File

@@ -67,7 +67,8 @@ class Api::OrdersController < Api::ApiController
end
}
#end extra time
puts params[:order_items]
puts "ITEM aaaaaaaaaaaaaaaaaaa"
# begin
@order = Order.new
@order.source = params[:order_source]

View File

@@ -94,10 +94,10 @@ class Origami::AddordersController < BaseOrigamiController
extra_time = Time.at(time)
end
end
if i["parent_order_item_id"]
items = {"order_item_id": i["order_item_id"],"item_instance_code": i["item_instance_code"],"quantity": i["quantity"],"parent_order_item_id": i["parent_order_item_id"],"options": i["options"]}
if i["parent_order_item_id"];
items = {"order_item_id": i["order_item_id"],"item_instance_code": i["item_instance_code"],"quantity": i["quantity"],"parent_order_item_id": i["parent_order_item_id"],"options": JSON.parse(i["options"])}
else
items = {"order_item_id": i["order_item_id"],"item_instance_code": i["item_instance_code"],"quantity": i["quantity"],"options": i["options"]}
items = {"order_item_id": i["order_item_id"],"item_instance_code": i["item_instance_code"],"quantity": i["quantity"],"options": JSON.parse(i["options"])}
end
items_arr.push(items)
}

View File

@@ -7,9 +7,12 @@ class Settings::MenusController < ApplicationController
def index
@settings_menus = Menu.all.page(params[:page]).per(10)
respond_to do |format|
format.html
format.csv { send_data Menu.to_csv }
end
format.html
# format.csv { send_data MenuCsvExport.generate }
format.csv { send_data Menu.to_csv }
# format.csv { send_data MenuCategory.to_csv }
end
end
# GET /settings/menus/1
@@ -71,6 +74,11 @@ class Settings::MenusController < ApplicationController
# end
end
def import
Menu.import(params[:file])
redirect_to settings_menu_path, notice: "imported"
end
private
# Use callbacks to share common setup or constraints between actions.
def set_settings_menu

View File

@@ -21,11 +21,12 @@ class Transactions::OrdersController < ApplicationController
@receipt_no = filter
@from = from
@to = to
respond_to do |format|
format.html # index.html.erb
format.json { render json: @orders }
end
format.html
format.json { render json: @orders }
# format.csv { send_data OrdersCsvExport.generate }
end
end
def show

View File

@@ -33,27 +33,20 @@ class Menu < ApplicationRecord
end
def self.to_csv
m_attributes = %w{id name is_active valid_days valid_time_from valid_time_to created_by created_at updated_at}
m_attributes = %w{name is_active valid_days valid_time_from valid_time_to created_by created_at updated_at}
CSV.generate(headers: true) do |csv|
csv << m_attributes
menu = Menu.all
menu.each do |user|
puts user
csv << m_attributes.map{ |attr| user.send(attr)}
end
end
end
# mc_attributes = %w{id menu_id code name alt_name order_by created_by menu_category_id is_available created_at updated_at}
# CSV.generate(headers: true) do |csv|
# csv << m_attributes
# csv << mc_attributes
# MenuCategory.all.each do |user|
# puts user
# csv << mc_attributes.map{ |attr| user.send(attr)}
# end
# end
def self.import(file)
CSV.foreach(file.path, headers:true) do |row|
Menu.create! row.to_hash
end
end
end

View File

@@ -1,7 +1,7 @@
class MenuCategory < ApplicationRecord
# before_create :generate_menu_category_code
belongs_to :menu
belongs_to :menu , counter_cache: true
has_many :children, :class_name => "MenuCategory", foreign_key: "menu_category_id"
belongs_to :parent, :class_name => "MenuCategory", foreign_key: "menu_category_id", optional: true
has_many :menu_items
@@ -83,4 +83,19 @@ class MenuCategory < ApplicationRecord
# def generate_menu_category_code
# self.code = SeedGenerator.generate_code(self.class.name, "C")
# end
def self.to_csv
mc_attributes = %w{id menu_id code name alt_name order_by created_by menu_category_id is_available created_at updated_at}
CSV.generate(headers: true) do |csv|
csv << mc_attributes
csv << mc_attributes
MenuCategory.all.each do |user|
puts user
csv << mc_attributes.map{ |attr| user.send(attr)}
end
end
end
end

View File

@@ -5,7 +5,8 @@ class OrderItem < ApplicationRecord
before_create :generate_custom_id
#Associations
belongs_to :order, autosave: true
belongs_to :order, autosave: true
# belongs_to :order, counter_cache: true
#Validation
validates_presence_of :item_code, :item_name, :qty

View File

@@ -375,7 +375,7 @@
<div class="modal-body">
<div class="row set-item">
<div class="col-md-4">
<p style="text-align: center;"> <%= image_tag "logo.png" ,width: '', height: '', :id => 'logo' %></p>
<p class="set_default_option" style="text-align: center;"> <%= image_tag "logo.png" ,width: '', height: '', :id => 'logo' %></p>
<!-- <div class="form-group">
<label class="col-md-6" style="margin-top:5px">Quantity</label>
<input type="number" name="qty" class="form-control col-md-5 input-number change_qty" id="set_change_qty" value="" min="1" max="100">

View File

@@ -7,6 +7,11 @@
</span>
</ol>
</div>
<!-- <h4>Import</h4>
<%= form_tag import_settings_menus_path, multipart:true do%>
<%=file_field_tag :file%>
<%=submit_tag "Import CSV"%>
<%end%> -->
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-2 col-lg-2">
<br><br>

View File

@@ -20,5 +20,7 @@ module SXRestaurants
config.active_record.time_zone_aware_types = [:datetime, :time]
config.active_job.queue_adapter = :sidekiq
config.time_zone = 'Asia/Rangoon'
end
end

View File

@@ -298,6 +298,7 @@ scope "(:locale)", locale: /en|mm/ do
#menu
resources :menus do
#menu_categories
collection { post :import }
resources :menu_categories, only: [:new, :create, :edit, :delete]
end

View File

@@ -1,128 +0,0 @@
[
{
"id": 1,
"name": "Administrator",
"role": "administrator",
"emp_id": "999",
"password_digest": "$2a$10$mfWmxBvOHt3NbWrLGOF/POTpnxF7QEtnW99qW818dkrQqVLtjQdrS",
"token_session": null,
"session_expiry": null,
"session_last_login": "2018-03-14 09:41:25 +0630",
"created_by": "SYSTEM DEFAULT",
"created_at": "2017-11-08 09:44:30 +0630",
"updated_at": "2018-03-14 16:02:09 +0630",
"image_path": {"url":null}
},
{
"id": 2,
"name": "Waiter",
"role": "waiter",
"emp_id": "111",
"password_digest": "$2a$10$PjBemEA2yKOcoGAyXjz81OqglrASIF8RTYHVe0vqp3FQ0T4/PzJJG",
"token_session": "662e797ad508ab6c43b1",
"session_expiry": "2018-02-21 01:45:11 +0630",
"session_last_login": "2018-02-20 13:45:11 +0630",
"created_by": "SYSTEM DEFAULT",
"created_at": "2017-11-08 09:44:30 +0630",
"updated_at": "2018-02-20 13:59:17 +0630",
"image_path": {"url":null}
},
{
"id": 3,
"name": "Waiter 2",
"role": "waiter",
"emp_id": "222",
"password_digest": "$2a$10$gXh/Tpbr8EyJSaxsbJYVh.K7Fr4bT0A1i2mWuuZm/FHQ4D/wV1E8e",
"token_session": "61868be9530b753ada84",
"session_expiry": "2018-03-14 05:41:12 +0630",
"session_last_login": "2018-03-13 17:11:12 +0630",
"created_by": "SYSTEM DEFAULT",
"created_at": "2017-11-08 09:44:30 +0630",
"updated_at": "2018-03-13 17:32:47 +0630",
"image_path": {"url":null}
},
{
"id": 4,
"name": "Cashier",
"role": "cashier",
"emp_id": "333",
"password_digest": "$2a$10$fHo.9wOn.yr.2Ke6iuCfou6DjpyHXwQSmZQ.43O7W4SnlmzuoIEF2",
"token_session": "693f6e98bb90b6af9978",
"session_expiry": "2018-03-15 12:36:28 +0630",
"session_last_login": "2018-03-14 16:36:28 +0630",
"created_by": "SYSTEM DEFAULT",
"created_at": "2017-11-08 09:44:30 +0630",
"updated_at": "2018-03-14 17:05:14 +0630",
"image_path": {"url":null}
},
{
"id": 5,
"name": "manager",
"role": "manager",
"emp_id": "888",
"password_digest": "$2a$10$EaU/Sxfsb8Q3kBIAyxSEJ.ZpRC9vxSdVAFvF0WXUvWiAqHyqGggoe",
"token_session": null,
"session_expiry": null,
"session_last_login": "2018-01-16 13:37:05 +0630",
"created_by": null,
"created_at": "2017-11-30 10:03:11 +0630",
"updated_at": "2018-01-16 13:48:02 +0630",
"image_path": {"url":null}
},
{
"id": 6,
"name": "Account",
"role": "account",
"emp_id": "777",
"password_digest": "$2a$10$bJmgIxHefkvxpxJQLQPcpurTJrp8.BwP/kirJRYb1v1thrU3TDzkC",
"token_session": null,
"session_expiry": null,
"session_last_login": "2018-01-16 10:37:22 +0630",
"created_by": null,
"created_at": "2018-01-16 10:23:09 +0630",
"updated_at": "2018-01-16 10:49:24 +0630",
"image_path": {"url":null}
},
{
"id": 7,
"name": "Supervisor",
"role": "supervisor",
"emp_id": "666",
"password_digest": "$2a$10$/WQirOw5nu6kKDiITTVa7.IGeVyxH5JmLp3/Astu/5DlOAoMLn4Ne",
"token_session": null,
"session_expiry": null,
"session_last_login": "2018-01-16 14:28:40 +0630",
"created_by": null,
"created_at": "2018-01-16 10:23:32 +0630",
"updated_at": "2018-01-16 15:32:33 +0630",
"image_path": {"url":null}
},
{
"id": 8,
"name": "123",
"role": "waiter",
"emp_id": "123",
"password_digest": "$2a$10$v8JBsc31XkLRNZ/QhfYBg.wbVT7CyVvk83U..0PsGiz61w0Atl/WW",
"token_session": "4fc9a18a5df511e507fc",
"session_expiry": "2018-02-01 20:08:35 +0630",
"session_last_login": "2018-02-01 14:08:35 +0630",
"created_by": null,
"created_at": "2018-02-01 14:07:16 +0630",
"updated_at": "2018-02-01 17:45:10 +0630",
"image_path": {"url":null}
},
{
"id": 9,
"name": "Cashier 2",
"role": "cashier",
"emp_id": "444",
"password_digest": "$2a$10$5n34O09xmrIHbgvX.uhr9uAaUR8etjaqiicaXr017VWm/qDkjKVue",
"token_session": "0477edce9cf259f280c1",
"session_expiry": "2018-02-20 19:07:50 +0630",
"session_last_login": "2018-02-20 11:37:50 +0630",
"created_by": null,
"created_at": "2018-02-14 17:10:12 +0630",
"updated_at": "2018-02-20 13:37:46 +0630",
"image_path": {"url":null}
}
]