<% if @status_sale == 'sale' %>
-
+
Receipt No:
<%= @obj_sale.receipt_no rescue '' %>
+
+ Date: <%= @date.utc.getlocal.strftime("%d/%m/%Y - %I:%M %p") rescue '-'%>
+
<% else %>
Order No:
@@ -206,17 +209,10 @@
<%= @obj_order.order_id rescue '' %>
- <% end %>
- <% if @status_sale == 'sale' %>
-
- Date: <%= @date.utc.getlocal.strftime("%d/%m/%Y - %I:%M %p") rescue '-'%>
-
- <% else %>
-
+
Date: <%= @date.utc.getlocal.strftime("%d/%m/%Y") rescue '-'%>
<% end %>
-
@@ -396,10 +392,7 @@
reply Back
Add Order
- <% if current_login_employee.role == "administrator" || current_login_employee.role == "manager" || current_login_employee.role == "supervisor" || current_login_employee.role == "cashier" || current_login_employee.role == "waiter" %>
Survey
- <% end %>
- <% if current_login_employee.role != "waiter" %>
<% if @room.bookings.length >= 1 %>
<% if @status_order == 'order' && @status_sale != 'sale' %>
@@ -423,14 +416,14 @@
Customer
<% if current_login_employee.role != "waiter" %>
+ Commissions
+ In Duties
active="true">Edit
active="true"> Void
+ <% end %>
active="true">Discount
Charges
- Commissions
- In Duties
- <% end %>
<% if !@split_bill.nil? %>
<% if @split_bill == '1' %>
Split Bill
@@ -485,11 +478,11 @@
<% end %>
<% end %>
- <% end %>
diff --git a/config/routes.rb b/config/routes.rb
index 6a4c403d..17b3bb0c 100755
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -165,6 +165,7 @@ scope "(:locale)", locale: /en|mm/ do
post 'sale/:sale_id/rounding_adj' => 'payments#rounding_adj', :as => "calculate_rouding_adjs"
get 'sale/:sale_id/first_bill' => 'payments#first_bill', :defaults => {:format => 'json'}
get 'sale/:sale_id/:type/payment' => 'payments#show'
+ post 'sale/:sale_id/:type/payment/print' => 'payments#print' #route for print receipt
post 'payment/foc' => 'payments#foc', :defaults => {:format => 'json'}
post 'payment/cash' => 'payments#create'
@@ -198,9 +199,9 @@ scope "(:locale)", locale: /en|mm/ do
#---------Add Customer --------------#
#resources :customers
- get '/:sale_id/:type/customers', to: "customers#add_customer"
+ get '/:sale_id/:type/customers/:page', to: "customers#add_customer"
get '/:customer_id/get_customer' => 'home#get_customer', :as => "show_customer_details"
- post '/:sale_id/:type/update_sale', to: "customers#update_sale_by_customer" # update customer id in sale table
+ post '/:sale_id/:type/customers/update_sale', to: "customers#update_sale_by_customer" # update customer id in sale table
post '/:sale_id/get_customer' => "customers#get_customer"
diff --git a/db/migrate/20170530072247_create_shops.rb b/db/migrate/20170530072247_create_shops.rb
index bd25c970..1c87b505 100755
--- a/db/migrate/20170530072247_create_shops.rb
+++ b/db/migrate/20170530072247_create_shops.rb
@@ -3,6 +3,9 @@ class CreateShops < ActiveRecord::Migration[5.1]
create_table :shops do |t|
t.string :logo
t.string :name, :null => false
+ t.string :shop_code, :null => false
+ t.string :client_name, :null => false
+ t.string :client_code, :null => false
t.string :address, :null => false
t.string :township, :null => false
t.string :city, :null => false
diff --git a/db/migrate/20170628103624_create_print_settings.rb b/db/migrate/20170628103624_create_print_settings.rb
index 329d3a7c..672953fc 100755
--- a/db/migrate/20170628103624_create_print_settings.rb
+++ b/db/migrate/20170628103624_create_print_settings.rb
@@ -6,7 +6,9 @@ class CreatePrintSettings < ActiveRecord::Migration[5.1]
t.string :template
t.string :font, :default => ""
t.string :printer_name, :null => false
- t.string :api_settings
+ t.string :api_settings,
+ t.string :brand_name
+ t.string :type
t.decimal :page_width, :null => false, :default => 210
t.decimal :page_height, :null => false, :default => 1450
t.integer :print_copies, :null => false, :default => 1
diff --git a/db/migrate/20180306044939_create_receipts.rb b/db/migrate/20180306044939_create_receipts.rb
new file mode 100644
index 00000000..22f3b0fa
--- /dev/null
+++ b/db/migrate/20180306044939_create_receipts.rb
@@ -0,0 +1,42 @@
+class CreateReceipts < ActiveRecord::Migration[5.1]
+ def change
+ create_table :receipts do |t|
+ t.string :client_code, :limit => 16, :null => false
+ t.string :client_name, :null => false
+ t.string :shop_code, :limit => 16, :null => false
+ t.string :shop_name, :null => false
+ t.integer :receipt_no, :limit => 8, :null => false
+ t.datetime :transaction_time, :null => false
+ t.datetime :receipt_open_time, :null => false
+ t.datetime :receipt_close_time, :null => false
+ t.decimal :gross_sales, :null => false, :default => 0
+ t.decimal :discount_amount, :null => false, :default => 0
+ t.decimal :sales, :null => false, :default => 0
+ t.decimal :tax_amount, :null => false, :default => 0
+ t.decimal :service_charges, :null => false, :default => 0
+ t.decimal :net_sales, :null => false, :default => 0
+ t.decimal :credit_card_sales, :null => false, :default => 0
+ t.decimal :voucher_sales, :null => false, :default => 0
+ t.decimal :foc_amount, :null => false, :default => 0
+ t.decimal :staff_meal_amount, :null => false, :default => 0
+ t.decimal :rounding_amount, :null => false, :default => 0
+ t.decimal :raw_wastage_amount, :null => false, :default => 0
+ t.decimal :semi_wastage_amount, :null => false, :default => 0
+ t.decimal :wastage_amount, :null => false, :default => 0
+ t.decimal :spoilage_amount, :null => false, :default => 0
+ t.decimal :sampling_amount, :null => false, :default => 0
+ t.integer :qty, :null => false, :default => 0
+ t.integer :no_of_pax, :null => false, :default => 0
+ t.integer :no_of_adult, :null => false, :default => 0
+ t.integer :no_of_child, :null => false, :default => 0
+ t.string :terminal_id, :null => false
+ t.string :employee_code, :limit => 4, :null => false
+ t.string :employee_name, :null => false
+ t.boolean :is_valid, :null => false, :default => false
+ t.boolean :overing, :null => false, :default => false
+ t.boolean :cancle, :null => false, :default => false
+ t.text :remarks
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20180306045018_create_receipt_details.rb b/db/migrate/20180306045018_create_receipt_details.rb
new file mode 100644
index 00000000..5fd38160
--- /dev/null
+++ b/db/migrate/20180306045018_create_receipt_details.rb
@@ -0,0 +1,43 @@
+class CreateReceiptDetails < ActiveRecord::Migration[5.1]
+ def change
+ create_table :receipt_details do |t|
+ t.string :client_code, :null => false
+ t.string :client_name, :null => false
+ t.string :shop_code, :null => false
+ t.string :shop_name, :null => false
+ t.string :receipt_no, :null => false
+ t.datetime :receipt_date, :null => false
+ t.datetime :transaction_date, :null => false
+ t.integer :item_sequence, :null => false
+ t.string :category_code, :null => false
+ t.string :category_name, :null => false
+ t.string :sub_category_code, :null => false
+ t.string :sub_category_name, :null => false
+ t.string :report_group_code, :null => false
+ t.string :report_group_name, :null => false
+ t.string :item_code, :null => false
+ t.string :item_name, :null => false
+ t.integer :qty, :null => false, :default => 0
+ t.string :transaction_type, :null => false
+ t.decimal :gross_sales, :null => false, :default => 0
+ t.string :discount_code, :null => false
+ t.decimal :discount_amount, :null => false, :default => 0
+ t.decimal :sales, :null => false, :default => 0
+ t.decimal :tax_amount, :null => false, :default => 0
+ t.decimal :service_charges, :null => false, :default => 0
+ t.decimal :net_sales, :null => false, :default => 0
+ t.boolean :is_foc, :null => false, :default => false
+ t.boolean :is_set_item, :null => false, :default => false
+ t.boolean :is_staff_meal, :null => false, :default => false
+ t.boolean :is_raw_wastage, :null => false, :default => false
+ t.boolean :is_semi_wastage, :null => false, :default => false
+ t.boolean :is_wastage, :null => false, :default => false
+ t.boolean :is_spoilage, :null => false, :default => false
+ t.boolean :is_sampling, :null => false, :default => false
+ t.boolean :tax_able, :null => false, :default => false
+ t.boolean :is_void, :null => false, :default => false
+ t.text :remarks
+ t.timestamps
+ end
+ end
+end
\ No newline at end of file
diff --git a/db/sym_master.sql b/db/sym_master.sql
index 89abaf5b..3677fc2f 100755
--- a/db/sym_master.sql
+++ b/db/sym_master.sql
@@ -88,6 +88,10 @@ delete from sym_node;
insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action) values ('cloud', 'sx', 'P');
# Create Trigger for Setting Channel
+
+ insert into sym_trigger
+ (trigger_id,source_table_name,channel_id,last_update_time,create_time)
+ values('seed_generators','seed_generators','setting',current_timestamp,current_timestamp);
insert into sym_trigger
(trigger_id,source_table_name,channel_id,last_update_time,create_time)
@@ -119,11 +123,11 @@ delete from sym_node;
insert into sym_trigger
(trigger_id,source_table_name,channel_id,last_update_time,create_time)
- values('tax_profiles','customers','setting',current_timestamp,current_timestamp);
+ values('tax_profiles','tax_profiles','setting',current_timestamp,current_timestamp);
insert into sym_trigger
(trigger_id,source_table_name,channel_id,last_update_time,create_time)
- values('display_images','customers','setting',current_timestamp,current_timestamp);
+ values('display_images','display_images','setting',current_timestamp,current_timestamp);
# Create Trigger for Dining Channel
@@ -339,6 +343,11 @@ delete from sym_node;
# Add triggers for tables with router
# Setting Channel # From cloud to Master
+
+ insert into sym_trigger_router
+ (trigger_id,router_id,initial_load_order,last_update_time,create_time)
+ values('seed_generators','cloud_2_sx', 100, current_timestamp, current_timestamp);
+
insert into sym_trigger_router
(trigger_id,router_id,initial_load_order,last_update_time,create_time)
values('lookups','cloud_2_sx', 100, current_timestamp, current_timestamp);
@@ -376,6 +385,11 @@ delete from sym_node;
values('display_images','cloud_2_sx', 100, current_timestamp, current_timestamp);
# Setting Channel # From Master to cloud
+
+ insert into sym_trigger_router
+ (trigger_id,router_id,initial_load_order,last_update_time,create_time)
+ values('seed_generators','sx_2_cloud', 100, current_timestamp, current_timestamp);
+
insert into sym_trigger_router
(trigger_id,router_id,initial_load_order,last_update_time,create_time)
values('lookups','sx_2_cloud', 100, current_timestamp, current_timestamp);
diff --git a/lib/tasks/clear_data.rake b/lib/tasks/clear_data.rake
index 17dcde74..43ba291e 100755
--- a/lib/tasks/clear_data.rake
+++ b/lib/tasks/clear_data.rake
@@ -17,6 +17,7 @@ namespace :clear do
Survey.delete_all
DiningFacility.update_all(status:'available')
CashierTerminal.update_all(is_currently_login: 0)
+ SeedGenerator.where("id > 1").update(:current => 0, :next => 1)
puts "Clear Data Done."
end
end
diff --git a/lib/tasks/receipt.rake b/lib/tasks/receipt.rake
new file mode 100644
index 00000000..fa24f481
--- /dev/null
+++ b/lib/tasks/receipt.rake
@@ -0,0 +1,238 @@
+namespace :consolidate do
+ desc "Receipt"
+ task :receipt => :environment do
+ Receipt.delete_all
+ sales = Sale.all_receipts
+
+ shop = Shop.find(1)
+ sales.each do |sale|
+ receipt = Receipt.new
+ receipt.client_code = shop.id
+ receipt.client_name = shop.id
+ receipt.shop_code = shop.id
+ receipt.shop_name = shop.id
+ receipt.receipt_no = sale.receipt_no
+ receipt.transaction_time = sale.requested_at #requet-at
+ receipt.receipt_open_time = sale.requested_at #before disco/after tax /after/ser_char
+ receipt.receipt_close_time = sale.receipt_close_time
+ receipt.gross_sales = sale.total_amount + sale.total_tax #before disco/after tax /after/ser_char
+ receipt.discount_amount = sale.total_discount + sale.item_discount
+ receipt.sales = sale.grand_total #after disco/after tax /after/ser_char /no roundingadn
+ receipt.tax_amount = sale.total_tax
+ receipt.service_charges = sale.service_charges
+ receipt.net_sales = sale.total_amount + sale.total_discount #after disco/before tax / no rounding
+ receipt.credit_card_sales = sale.mpu_amount + sale.master_amount + sale.visa_amount + sale.jcb_amount + sale.unionpay_amount + sale.credit_amount #
+ receipt.voucher_sales = 0
+ receipt.foc_amount = sale.foc_amount + sale.item_foc
+ receipt.staff_meal_amount = 0
+ receipt.rounding_amount = sale.rounding_adjustment
+ receipt.raw_wastage_amount = 0
+ receipt.semi_wastage_amount = 0
+ receipt.wastage_amount = 0
+ receipt.spoilage_amount = 0
+ receipt.sampling_amount = 0
+ receipt.qty = sale.qty
+ receipt.no_of_pax = 0
+ receipt.no_of_adult = (sale.adult) ? sale.adult : 0
+ receipt.no_of_child = (sale.child) ? sale.child : 0
+ receipt.terminal_id = ShiftSale.find(sale.shift_sale_id).cashier_terminal_id
+ receipt.employee_code = Employee.find(sale.cashier_id).emp_id
+ receipt.employee_name = sale.cashier_name
+ receipt.is_valid = (sale.payment_status=="void") ? false : true #void is false
+ receipt.overing =false
+ receipt.cancle = (sale.payment_status=="void") ? false : true # void is cancel
+ receipt.remarks = sale.remark
+ receipt.save
+ end
+ end
+
+ desc "Receipt Detail"
+ task :receipt_detail => :environment do
+ ReceiptDetail.delete_all
+ sales = Sale.all_receipt_details
+
+ shop = Shop.find(1)
+
+ sale_id = ''
+ count = 0
+ @total_qty = 0
+ @total_gross_sales = 0
+ @total_sales = 0
+ @total_net_sales = 0
+@z =1
+ @item_sequence = 1
+ sale_count = sales.to_a.count
+ sales.each do |sale|
+
+ if sale.qty > 0
+
+ if sale.item_instance_code !=nil
+ menu_category = MenuCategory.find(MenuItem.find_by_item_code(sale.product_code).menu_category_id)
+ name = menu_category.name
+ code = menu_category.code
+ menu_item = MenuItem.find_by_item_code(sale.product_code)
+ menu_name = menu_item.name
+ menu_code = menu_item.item_code
+ menu_type = menu_item.type
+ end
+ if sale.product_code == "Other Charges" && sale.status == "Other Charges"
+ code = sale.product_code
+ name = sale.product_code
+ menu_name = sale.product_code
+ menu_code = sale.product_code
+ menu_type = sale.product_code
+ end
+
+ @receipt_no = sale.receipt_no
+ @requested_at = sale.requested_at
+
+ if sale_id == sale.sale_id || count == 0 || @z ==0
+ @total_qty += sale.qty
+ @total_gross_sales += sale.price
+ @total_sales += sale.price
+ @total_net_sales += sale.taxable_price
+ end
+
+ if sale_id != sale.sale_id && count !=0
+
+ receipt = ReceiptDetail.new
+ receipt.client_code = shop.id
+ receipt.client_name = shop.id
+ receipt.shop_code = shop.id
+ receipt.shop_name = shop.id
+ receipt.receipt_no = @receipt_no
+ receipt.receipt_date = @requested_at #requet-at
+ receipt.transaction_date = @requested_at #before disco/after tax /after/ser_char
+ receipt.item_sequence = @item_sequence
+ receipt.category_code = ''
+ receipt.category_name = ''
+ receipt.sub_category_code = 0
+ receipt.sub_category_name = 0
+ receipt.report_group_code = 0
+ receipt.report_group_name = 0
+ receipt.item_code = ''
+ receipt.item_name = ''
+ receipt.qty = @total_qty
+ receipt.transaction_type = "Tender"
+ receipt.gross_sales = @total_gross_sales
+ receipt.discount_code = ''
+ receipt.discount_amount = 0
+ receipt.sales = @total_sales
+ receipt.tax_amount = 0
+ receipt.service_charges = 0
+ receipt.net_sales = @total_net_sales
+ receipt.is_set_item = false
+ receipt.is_foc = false
+ receipt.is_staff_meal = false
+ receipt.is_raw_wastage = false
+ receipt.is_semi_wastage = false
+ receipt.is_wastage = false
+ receipt.is_spoilage = false
+ receipt.is_sampling = false
+ receipt.tax_able = false
+ receipt.is_void = false
+ receipt.remarks = ""
+ receipt.save
+ @type = "Tender"
+ @item_sequence = 1
+ @total_qty = 0
+ @total_gross_sales = 0
+ @total_sales = 0
+ @total_net_sales = 0
+ @z = 0
+ end
+
+
+ discount_amount = (sale.status=="Discount") ? sale.price : 0
+ receipt = ReceiptDetail.new
+ receipt.client_code = shop.id
+ receipt.client_name = shop.id
+ receipt.shop_code = shop.id
+ receipt.shop_name = shop.id
+ receipt.receipt_no = sale.receipt_no
+ receipt.receipt_date = sale.requested_at #requet-at
+ receipt.transaction_date = sale.requested_at #before disco/after tax /after/ser_char
+ receipt.item_sequence = @item_sequence
+ receipt.category_code = name
+ receipt.category_name = code
+ receipt.sub_category_code = 0
+ receipt.sub_category_name = 0
+ receipt.report_group_code = 0
+ receipt.report_group_name = 0
+ receipt.item_code = menu_name
+ receipt.item_name = menu_code
+ receipt.qty = sale.qty
+ receipt.transaction_type = (sale.status==nil) ? "Sales" : sale.status
+ receipt.gross_sales = sale.price
+ receipt.discount_code = sale.sale_item_id
+ receipt.discount_amount = discount_amount
+ receipt.sales = sale.price
+ receipt.tax_amount = 0
+ receipt.service_charges = 0
+ receipt.net_sales = sale.taxable_price
+ receipt.is_set_item = (menu_type=="SetMenuItem")? true : false
+ receipt.is_foc = (sale.status=="foc") ? true : false
+ receipt.is_staff_meal = false
+ receipt.is_raw_wastage = false
+ receipt.is_semi_wastage = false
+ receipt.is_wastage = false
+ receipt.is_spoilage = false
+ receipt.is_sampling = false
+ receipt.tax_able = sale.is_taxable
+ receipt.is_void = (sale.status=="void")? true : false
+ receipt.remarks = sale.remark
+ receipt.save
+
+ end
+
+ @z += 1
+
+
+ count += 1
+ @item_sequence += 1
+ sale_id = sale.sale_id
+ end
+
+ if count == sale_count
+ receipt = ReceiptDetail.new
+ receipt.client_code = shop.id
+ receipt.client_name = shop.id
+ receipt.shop_code = shop.id
+ receipt.shop_name = shop.id
+ receipt.receipt_no = @receipt_no
+ receipt.receipt_date = @requested_at #requet-at
+ receipt.transaction_date = @requested_at #before disco/after tax /after/ser_char
+ receipt.item_sequence = @item_sequence
+ receipt.category_code = ''
+ receipt.category_name = ''
+ receipt.sub_category_code = 0
+ receipt.sub_category_name = 0
+ receipt.report_group_code = 0
+ receipt.report_group_name = 0
+ receipt.item_code = ''
+ receipt.item_name = ''
+ receipt.qty = @total_qty
+ receipt.transaction_type = "Tender"
+ receipt.gross_sales = @total_gross_sales
+ receipt.discount_code = ''
+ receipt.discount_amount = 0
+ receipt.sales = @total_sales
+ receipt.tax_amount = 0
+ receipt.service_charges = 0
+ receipt.net_sales = @total_net_sales
+ receipt.is_set_item = false
+ receipt.is_foc = false
+ receipt.is_staff_meal = false
+ receipt.is_raw_wastage = false
+ receipt.is_semi_wastage = false
+ receipt.is_wastage = false
+ receipt.is_spoilage = false
+ receipt.is_sampling = false
+ receipt.tax_able = false
+ receipt.is_void = false
+ receipt.remarks = ""
+ receipt.save
+ end
+ end
+
+end
\ No newline at end of file
diff --git a/spec/models/receipt_detail_spec.rb b/spec/models/receipt_detail_spec.rb
new file mode 100644
index 00000000..017ee888
--- /dev/null
+++ b/spec/models/receipt_detail_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe ReceiptDetail, type: :model do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
diff --git a/spec/models/receipt_spec.rb b/spec/models/receipt_spec.rb
new file mode 100644
index 00000000..3b140805
--- /dev/null
+++ b/spec/models/receipt_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe Receipt, type: :model do
+ pending "add some examples to (or delete) #{__FILE__}"
+end