diff --git a/.gitignore b/.gitignore
index 02338531..91a498bc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -45,3 +45,6 @@ config/deploy/config/*
# Gem files
#Gemfile
#Gemfile.lock
+
+# For Redis Server log file
+dump.rdb
diff --git a/Gemfile b/Gemfile
index 0b7c3f11..99489d5b 100644
--- a/Gemfile
+++ b/Gemfile
@@ -9,9 +9,9 @@ end
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.1.0'
# Use mysql as the database for Active Record
-
gem 'mysql2', '>= 0.3.18', '< 0.5'
+#Use PosgreSQL
gem 'pg'
# redis server for cable
@@ -42,12 +42,10 @@ gem 'to_xls-rails'
#Reporting gem
#gem 'compendium'
-
-# Pagination
-gem 'kaminari', :git => "git://github.com/amatsuda/kaminari.git", :branch => 'master'
-
+#gem "cancan"
# Use jquery as the JavaScript library
gem 'jquery-rails'
+gem 'jquery-ui-rails'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
@@ -59,8 +57,14 @@ gem 'bcrypt', '~> 3.1.7'
gem 'sidekiq'
+# XML parser
+#gem 'nokogiri', '~> 1.6'
+
# Pagination
-gem 'kaminari', :git => "git://github.com/amatsuda/kaminari.git", :branch => 'master'
+gem 'kaminari', '~> 1.0.1'
+
+# Datatable
+gem 'filterrific'
# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development
@@ -90,3 +94,11 @@ end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
+
+gem 'httparty', '~> 0.15.5'
+
+# gem 'momentjs-rails', '>= 2.9.0'
+# gem 'bootstrap-datepicker-rails'
+# # gem 'momentjs-rails', '>= 2.9.0'
+# gem 'bootstrap3-datetimepicker-rails'z
+gem 'bootstrap-datepicker-rails'
diff --git a/Gemfile.lock b/Gemfile.lock
index 5dce67dc..e6f683f6 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,21 +1,3 @@
-GIT
- remote: git://github.com/amatsuda/kaminari.git
- revision: c3c853a944cd2bff072ae05e48c563b2c9a29597
- branch: master
- specs:
- kaminari (1.0.1)
- activesupport (>= 4.1.0)
- kaminari-actionview (= 1.0.1)
- kaminari-activerecord (= 1.0.1)
- kaminari-core (= 1.0.1)
- kaminari-actionview (1.0.1)
- actionview
- kaminari-core (= 1.0.1)
- kaminari-activerecord (1.0.1)
- activerecord
- kaminari-core (= 1.0.1)
- kaminari-core (1.0.1)
-
GEM
remote: https://rubygems.org/
specs:
@@ -64,6 +46,8 @@ GEM
bootstrap (4.0.0.alpha6)
autoprefixer-rails (>= 6.0.3)
sass (>= 3.4.19)
+ bootstrap-datepicker-rails (1.6.4.1)
+ railties (>= 3.0)
builder (3.2.3)
byebug (9.0.6)
coffee-rails (4.2.2)
@@ -88,36 +72,54 @@ GEM
faker (1.7.3)
i18n (~> 0.5)
ffi (1.9.18)
+ filterrific (2.1.2)
font-awesome-rails (4.7.0.2)
railties (>= 3.2, < 5.2)
globalid (0.4.0)
activesupport (>= 4.2.0)
- i18n (0.8.1)
- jbuilder (2.6.4)
- activesupport (>= 3.0.0)
+ httparty (0.15.5)
+ multi_xml (>= 0.5.2)
+ i18n (0.8.4)
+ jbuilder (2.7.0)
+ activesupport (>= 4.2.0)
multi_json (>= 1.2)
jquery-rails (4.3.1)
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
+ jquery-ui-rails (6.0.1)
+ railties (>= 3.2.16)
+ kaminari (1.0.1)
+ activesupport (>= 4.1.0)
+ kaminari-actionview (= 1.0.1)
+ kaminari-activerecord (= 1.0.1)
+ kaminari-core (= 1.0.1)
+ kaminari-actionview (1.0.1)
+ actionview
+ kaminari-core (= 1.0.1)
+ kaminari-activerecord (1.0.1)
+ activerecord
+ kaminari-core (= 1.0.1)
+ kaminari-core (1.0.1)
listen (3.0.8)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
loofah (2.0.3)
nokogiri (>= 1.5.9)
- mail (2.6.5)
+ mail (2.6.6)
mime-types (>= 1.16, < 4)
method_source (0.8.2)
mime-types (3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2016.0521)
- mini_portile2 (2.1.0)
+ mini_portile2 (2.2.0)
minitest (5.10.2)
multi_json (1.12.1)
+ multi_xml (0.6.0)
mysql2 (0.4.6)
nio4r (2.1.0)
- nokogiri (1.7.2)
- mini_portile2 (~> 2.1.0)
+ nokogiri (1.8.0)
+ mini_portile2 (~> 2.2.0)
pdf-core (0.7.0)
pg (0.20.0)
prawn (2.2.2)
@@ -125,7 +127,7 @@ GEM
ttfunk (~> 1.5)
prawn-table (0.2.2)
prawn (>= 1.3.0, < 3.0.0)
- puma (3.8.2)
+ puma (3.9.1)
rack (2.0.3)
rack-cors (0.4.1)
rack-protection (2.0.0)
@@ -189,7 +191,7 @@ GEM
activesupport (>= 3.2.1)
shoulda-matchers (3.1.1)
activesupport (>= 4.0.0)
- sidekiq (5.0.0)
+ sidekiq (5.0.2)
concurrent-ruby (~> 1.0)
connection_pool (~> 2.2, >= 2.2.0)
rack-protection (>= 1.5.0)
@@ -241,16 +243,20 @@ PLATFORMS
DEPENDENCIES
bcrypt (~> 3.1.7)
bootstrap (~> 4.0.0.alpha3)
+ bootstrap-datepicker-rails
byebug
coffee-rails (~> 4.2)
cups (~> 0.0.7)
database_cleaner
factory_girl_rails (~> 4.0)
faker
+ filterrific
font-awesome-rails
+ httparty (~> 0.15.5)
jbuilder (~> 2.5)
jquery-rails
- kaminari!
+ jquery-ui-rails
+ kaminari (~> 1.0.1)
listen (~> 3.0.5)
mysql2 (>= 0.3.18, < 0.5)
pg
@@ -276,4 +282,4 @@ DEPENDENCIES
web-console (>= 3.3.0)
BUNDLED WITH
- 1.15.0
+ 1.15.1
diff --git a/app/assets/javascripts/orgiami.js b/app/assets/javascripts/CRM.js
similarity index 91%
rename from app/assets/javascripts/orgiami.js
rename to app/assets/javascripts/CRM.js
index fc91e269..fc535ff7 100644
--- a/app/assets/javascripts/orgiami.js
+++ b/app/assets/javascripts/CRM.js
@@ -11,7 +11,10 @@
// about supported directives.
//
//= require jquery
+//= require tether
//= require bootstrap
//= require jquery_ujs
//= require turbolinks
//= require cable
+//= require jquery-ui
+//= require bootstrap-datepicker
\ No newline at end of file
diff --git a/app/assets/javascripts/OQS.js b/app/assets/javascripts/OQS.js
index 80a09b47..9ad540ab 100644
--- a/app/assets/javascripts/OQS.js
+++ b/app/assets/javascripts/OQS.js
@@ -17,6 +17,11 @@
//= require cable
$(document).ready(function(){
+ // auto refresh every 10 seconds
+ // setTimeout(function(){
+ // window.location.reload(1);
+ // }, 10000);
+
$('.queue_station').on('click',function(){
var orderZone=$(this).children().children().children('.order-zone').text();
var orderItem=$(this).children().children().children('.order-item').text();
@@ -39,36 +44,44 @@ $(document).ready(function(){
});
// complete for queue item
- $('.order-complete').on('click',function(){
- var _self= $(this);
+ $('.order-complete').on('click',function(e){
+ //e.preventDefault();
+ var _self = $(this); // To know in ajax return
var assigned_item_id=$(this).attr('id').substr(15);
var params = { 'id':assigned_item_id };
- var station=$(this).parent().parent(".queue_station").parent().parent().attr('id');
$.ajax({
type: 'POST',
url: '/oqs/update_delivery',
data: params,
dataType: 'json',
- success: function(data){
- var queue_station=_self.parent().parent(".queue_station");
+ success: function(data){
+ for (i = 0; i < data.length; i++) {
+ var queue_station = $('#assigned_queue_' + data[i]).parent().parent(".queue_station");
+ var station = queue_station.parent().parent().attr('id');
- // Remove a queue card from current station
- queue_station.remove();
+ // Remove a queue card from current station
+ queue_station.remove();
- // Remove a queue card from current station
- queue_station.children('.card-footer').remove();
-
- // Add removed queue card from station to completed
- $("#completed").children('.card-columns').append(queue_station);
+ // Remove a queue card from current station
+ queue_station.children('.card-footer').remove();
+
+ // Add removed queue card from station to completed
+ $("#completed").children('.card-columns').append(queue_station);
- // update queue item count in station
- $("#"+station+"_count").text(parseInt($("#"+station+"_count").text())-1);
- $("#completed_count").text(parseInt($("#completed_count").text())+1);
+ // update queue item count in each station
+ var station_count=parseInt($("#"+station+"_count").text()) - 1;
+ $("#"+station+"_count").text(station_count);
+ }
+
+ // update queue item count in completed station
+ $("#completed_count").text(parseInt($("#completed_count").text()) + data.length);
alert("updated!");
+ // Page reload
+ location.reload();
}
- });
+ });
});
$('#print_order_item').on('click',function(){
@@ -80,4 +93,14 @@ $(document).ready(function(){
success: function(data){ }
});
});
+
+ $('#print_order_summary').on('click',function(){
+ var assigned_item_id=$('.selected-item').children('.card-block').children('.assigned-order-item').text();
+ var params = { 'id':assigned_item_id };
+ $.ajax({
+ type: 'GET',
+ url: '/oqs/print/print_order_summary/'+assigned_item_id,
+ success: function(data){ }
+ });
+ });
});
diff --git a/app/assets/javascripts/origami/request_bills.coffee b/app/assets/javascripts/api/origami/paypar.coffee
similarity index 100%
rename from app/assets/javascripts/origami/request_bills.coffee
rename to app/assets/javascripts/api/origami/paypar.coffee
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index f7b2e2b0..202d4387 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -17,3 +17,141 @@
//= require turbolinks
//= require cable
//= require settings/processing_items
+//= require jquery-ui
+//= require bootstrap-datepicker
+
+$(document).on("focus", "[data-behaviour~='datepicker']", function(e){
+ $(this).datepicker({"format": "yyyy-M-dd", "weekStart": 1, "autoclose": true});
+ $('.dropdown-toggle').dropdown();
+});
+
+/*
+* ToDo Move to here from pages
+*
+*
+
+
+
+$(function(){
+ $('#custom_excel').hide();
+
+ $('#custom_excel').click(function(){
+ var url = $('#custom_excel').attr('data-url');
+ $('#frm_report').attr('action',url)
+ $('#frm_report').submit();
+ // window.location = url;
+ });
+
+ var item = $('#item').val();
+ var payment_type = $('#payment_type');
+
+ if(item == 'order'){
+ $('#cashier').hide();
+ $('#waiter').show();
+ if(payment_type){
+ $('#payment_type').hide();
+ }
+ }
+ else if(item == 'sale'){
+ $('#waiter').hide();
+ $('#cashier').show();
+ }
+ else{
+ $('#waiter').hide();
+ $('#cashier').show();
+ $("#item").val('sale');
+ }
+});
+
+//Reset the form to pervious values
+$("#branch").val(<%=params[:branch]%>);
+$("#waiter").val("<%=params[:waiter]%>");
+$("#cashier").val(<%=params[:cashier]%>);
+$("#product").val(<%=params[:product]%>);
+$("#singer").val(<%=params[:singer]%>);
+$("#item").val('<%=params[:item]%>');
+$("#guest_role").val('<%=params[:guest_role]%>');
+
+
+$("#from").val("<%=params[:from]%>");
+$("#to").val("<%=params[:to]%>");
+$("#sel_period").val(<%=params[:period]%>);
+$("#sel_sale_type").val(<%=params[:sale_type]%>);
+
+<% if params[:period_type] == 1 || params[:period_type] == "1" %>
+ $("#rd_period_type_1").attr("checked","checked");
+<% else %>
+ $("#rd_period_type_0").attr("checked","checked");
+<% end %>
+$(".btn-group button").removeClass("active");
+<% report_type = params[:report_type].blank? ? "0" : params[:report_type] %>
+$("#btn_report_type_<%= report_type %>").addClass("active");
+
+$('#item').change(function(){
+ var item = $('#item').val();
+ var payment_type = $('#payment_type');
+
+ if(item == 'sale'){
+ $('#waiter').hide();
+ $('#cashier').show();
+ if(payment_type){
+ $('#payment_type').show();
+ }
+ }
+ else{
+ $('#cashier').hide();
+ $('#waiter').show();
+ if(payment_type){
+ $('#payment_type').hide();
+ }
+ }
+});
+
+$(function(){
+ var check_arr = [];
+ var search = '<%= params[:period_type] %>';
+ if(search){
+ if(parseInt(search) == 0){
+ search_by_period();
+ }
+ else{
+ search_by_date();
+ }
+ }else{
+ search_by_period();
+ }
+ $('#sel_period').change(function(){
+ search_by_period();
+ });
+ function search_by_period(){
+ var period = $('#sel_period').val();
+ var period_type = 0;
+ var from = "";
+ var to = "";
+ }
+
+ $('#from').change(function(){
+ search_by_date();
+ });
+
+ $('#to').change(function(){
+ search_by_date();
+ });
+ function search_by_date(){
+ var from = $('#from').val();
+ var to = $('#to').val();
+ var period = 0;
+ var period_type = 1;
+ if(to != '' && from != ''){
+ shift_name = from + ',' + to;
+ check_arr.push(to);
+ // console.log(check_arr.length)
+ if(check_arr.length == 1){
+ }
+ if(check_arr.length == 3){
+ check_arr = [];
+ }
+ }
+ }
+});
+*/
diff --git a/app/assets/javascripts/cable.js b/app/assets/javascripts/cable.js
index 739aa5f0..43efe3f2 100644
--- a/app/assets/javascripts/cable.js
+++ b/app/assets/javascripts/cable.js
@@ -5,6 +5,7 @@
//= require_self
//= require_tree ./channels
+// Temp Disable
(function() {
this.App || (this.App = {});
diff --git a/app/assets/javascripts/crm/dining_queues.coffee b/app/assets/javascripts/crm/dining_queues.coffee
new file mode 100644
index 00000000..24f83d18
--- /dev/null
+++ b/app/assets/javascripts/crm/dining_queues.coffee
@@ -0,0 +1,3 @@
+# Place all the behaviors and hooks related to the matching controller here.
+# All this logic will automatically be available in application.js.
+# You can use CoffeeScript in this file: http://coffeescript.org/
diff --git a/app/assets/javascripts/membership_actions.coffee b/app/assets/javascripts/membership_actions.coffee
new file mode 100644
index 00000000..24f83d18
--- /dev/null
+++ b/app/assets/javascripts/membership_actions.coffee
@@ -0,0 +1,3 @@
+# Place all the behaviors and hooks related to the matching controller here.
+# All this logic will automatically be available in application.js.
+# You can use CoffeeScript in this file: http://coffeescript.org/
diff --git a/app/assets/javascripts/origami.js b/app/assets/javascripts/origami.js
new file mode 100644
index 00000000..b39a4c6e
--- /dev/null
+++ b/app/assets/javascripts/origami.js
@@ -0,0 +1,346 @@
+// This is a manifest file that'll be compiled into application.js, which will include all the files
+// listed below.
+//
+// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
+// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
+//
+// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
+// compiled file. JavaScript code in this file should be added after the last require_* statement.
+//
+// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
+// about supported directives.
+//
+//= require jquery
+//= require tether
+//= require bootstrap
+//= require jquery_ujs
+//= require turbolinks
+//= require cable
+//= require jquery-ui
+//= require bootstrap-datepicker
+
+$(document).ready(function(){
+ // auto refresh every 60 seconds
+ // setTimeout(function(){
+ // window.location.reload(1);
+ // }, 60000);
+
+ // For selected order return
+ var order_status = "";
+ order_status = $(".selected-item").children().find(".orders-order-status").text().substr(0,6).trim();
+
+ // Enable/Disable Button
+ control_button(order_status);
+
+ $(".orders").on('click', function(){
+ $("#order-sub-total").text('');
+ // $("#order-food").text('');
+ // $("#order-beverage").text('');
+ $("#order-discount").text('');
+ $("#order-Tax").text('');
+ $("#order-grand-total").text('');
+
+ var zone_name=$(this).find(".orders-table").text();
+ var receipt_no=$(this).find(".orders-receipt-no").text();
+ var unique_id = $(this).find(".orders-id").text();
+ var order_status=$(this).find(".orders-order-status").text().trim();
+
+ // Enable/Disable Button
+ control_button(order_status);
+
+ var customer_id=$(this).find(".customer-id").text();
+ show_customer_details(customer_id);
+
+ $("#re-print").val(unique_id);
+
+ var cashier="";
+ var receipt_date="";
+ var sub_total=0;
+ var discount_amount=0;
+ var tax_amount=0;
+ var grand_total_amount=0;
+
+ $("#order-title").text("ORDER DETAILS - " + zone_name);
+ // clear order items
+ $("#order-items-table").children("tbody").empty();
+
+ // AJAX call for order
+ $.ajax({
+ type: "POST",
+ url: "/origami/" + unique_id,
+ data: { 'booking_id' : unique_id },
+ success:function(result){
+ for (i = 0; i < result.length; i++) {
+ var data = JSON.stringify(result[i]);
+ var parse_data = JSON.parse(data);
+ var show_date = "";
+
+ // Receipt Header
+ receipt_no = result[i].receipt_no;
+ cashier = result[i].cashier_name;
+ if(result[i].receipt_date != null){
+ receipt_date = new Date(result[i].receipt_date);
+ show_date = receipt_date.getDate() + "-" + receipt_date.getMonth() + "-" + receipt_date.getFullYear() + ' ' + receipt_date.getHours()+ ':' + receipt_date.getMinutes()
+ }
+
+ $("#receipt_no").text(receipt_no);
+ $("#cashier").text(cashier == null ? "" : cashier);
+ $("#receipt_date").text(show_date);
+
+
+ //Receipt Charges
+ sub_total += (parse_data.qty*parse_data.price);
+
+ discount_amount = parse_data.discount_amount == null? '0.0' : parse_data.discount_amount;
+ tax_amount = parse_data.tax_amount;
+ grand_total_amount = parse_data.grand_total_amount;
+
+ $("#order-sub-total").text(sub_total);
+ // $("#order-food").text('');
+ // $("#order-beverage").text('');
+ $("#order-discount").text(discount_amount);
+ $("#order-Tax").text(tax_amount);
+ $("#order-grand-total").text(grand_total_amount);
+
+ // Ordered Items
+ var order_items_rows = "
" +
+ "" + parse_data.item_name + " " +
+ "" + parse_data.qty + " " +
+ "" + parse_data.qty*parse_data.price + " " +
+ " ";
+
+ $("#order-items-table").children("tbody").append(order_items_rows);
+ }
+ }
+ });
+ // End AJAX Call
+
+ $('.orders').removeClass('selected-item');
+ $(this).addClass('selected-item');
+ });
+
+ // Bill Request
+ $('#request_bills').click(function() {
+ var order_id=$(".selected-item").find(".orders-id").text();
+ if(order_id!=""){
+ window.location.href = '/origami/' + order_id + '/request_bills'
+ }
+ else {
+ alert("Please select an order!");
+ }
+ return false;
+ });
+
+ // Discount for Payment
+ $('#discount').click(function() {
+ var order_id=$(".selected-item").find(".orders-id").text();
+ if(order_id!=""){
+ window.location.href = '/origami/' + order_id + '/discount'
+ }
+ else {
+ alert("Please select an order!");
+ }
+
+ return false;
+ });
+
+ // Pay Discount for Payment
+ $("#pay-discount").on('click', function(e){
+ e.preventDefault();
+ var sale_id = $('#sale-id').text();
+ var sale_item_id = $('.selected-item').attr('id');
+ var sub_total = $('#order-sub-total').text();
+ var grand_total = $('#order-grand-total').text();
+ var discount_type = $('#discount-type').val();
+ var discount_value = $('#discount-amount').val();
+ var discount_amount = discount_value;
+ var ajax_url = "/origami/" + sale_id + "/discount";
+
+ if(sale_item_id != null){
+ ajax_url = "/origami/" + sale_item_id + "/discount";
+ sub_total = $("#"+sale_item_id).children().find("#item-total-price").text();
+ }
+
+ // For Percentage Discount
+ if(discount_type == 1){
+ discount_amount=(sub_total*discount_value)/100;
+ }
+
+ var params = {'sale_id': sale_id, 'sale_item_id': sale_item_id, 'grand_total' : grand_total, 'discount_type':discount_type, 'discount_value':discount_value, 'discount_amount':discount_amount};
+ $.ajax({
+ type: "POST",
+ url: ajax_url,
+ data: params,
+ success:function(result){ }
+ });
+ });
+
+
+ // Payment for Bill
+ $('#pay-bill').click(function() {
+ var sale_id=$(".selected-item").find(".orders-id").text();
+ if(sale_id!=""){
+ window.location.href = '/origami/sale/'+ sale_id + "/payment"
+ }
+ else {
+ alert("Please select an order!");
+ }
+
+ return false;
+ });
+
+ $('#customer').click(function() {
+ var sale = $(".selected-item").find(".orders-id").text();
+ if (sale.substring(0, 3)=="SAL") {
+ var sale_id = sale
+ }else{
+ var sale_id = $(".selected-item").find(".order-cid").text();
+ }
+ window.location.href = '/origami/'+ sale_id + "/customers"
+
+ return false;
+ });
+
+ $('#re-print').click(function() {
+ var sale_id = $(".selected-item").find(".orders-id").text();
+
+ window.location.href = '/origami/'+ sale_id + "/reprint"
+
+ return false;
+ });
+
+ function show_customer_details(customer_id){
+
+ if(window.location.pathname.substring(0, 12) == "/origami/SAL"){
+ var url = customer_id+"/get_customer/"
+ }else{
+ var url = "origami/"+customer_id+"/get_customer/"
+ }
+
+ $('.customer_detail').removeClass('hide');
+
+ //Start Ajax
+ $.ajax({
+ type: "GET",
+ url: url,
+ data: {},
+ dataType: "json",
+ success: function(data) {
+ $("#customer_name").text(data["customer"].name);
+ $.each(data["response_data"]["data"], function (i) {
+ if(data["response_data"]["data"][i]["accountable_type"] == "RebateAccount"){
+ var balance = data["response_data"]["data"][i]["balance"];
+ if (data["response_data"]["status"]==true) {
+ $('.rebate_amount').removeClass('hide');
+ row =
+ '' + data["response_data"]["data"][i]["accountable_type"] +' '
+ +'' + balance + ' ';
+
+ $(".rebate_amount").html(row);
+ }
+
+ }
+ });
+ }
+ });
+ //End Ajax
+ }
+
+ /* For Receipt - Calculate discount or tax */
+ $('.cashier_number').on('click', function(event){
+ if(event.handled !== true) {
+ var original_value=0;
+ original_value = $('#discount-amount').val();
+
+ var input_type = $(this).attr("data-type");
+
+ switch (input_type) {
+ case 'num':
+ var input_value = $(this).attr("data-value");
+ if (original_value == "0.0"){
+ $('#discount-amount').val(input_value);
+ update_balance();
+ }
+ else{
+ $('#discount-amount').val(original_value + '' + input_value);
+ update_balance();
+ }
+ break;
+
+ case 'add':
+ var input_value = $(this).attr("data-value");
+ amount = parseInt(input_value);
+ $('#discount-amount').val(amount);
+ $('#discount-type').val(1);
+ update_balance();
+ break;
+
+ case 'del' :
+ var discount_text=$('#discount-amount').val();
+ $('#discount-amount').val(discount_text.substr(0,discount_text.length-1));
+ update_balance();
+ break;
+
+ case 'clr':
+ $('#discount-amount').val("0.0");
+ update_balance();
+ break;
+ }
+
+ event.handled = true;
+ } else {
+ return false;
+ }
+ });
+
+ $('.discount-item-row').on('click',function(){
+ $('.discount-item-row').removeClass('selected-item');
+ $(this).addClass('selected-item');
+ });
+
+});
+
+/* Button Control by Status */
+function control_button(order_status){
+ if(order_status=="billed"){
+ $("#customer").prop('disabled', false);
+ $("#request_bills").prop('disabled', true);
+ $("#discount").prop('disabled', false);
+ $("#pay-bill").prop('disabled', false);
+ $("#re-print").prop('disabled', true);
+ }
+ else if(order_status=="new") {
+ $("#customer").prop('disabled', false);
+ $("#request_bills").prop('disabled', false);
+ $("#discount").prop('disabled', true);
+ $("#pay-bill").prop('disabled', true);
+ $("#re-print").prop('disabled', true);
+ }else if(order_status=="completed"){
+ $("#re-print").prop('disabled', false);
+ }
+ else {
+ $("#customer").prop('disabled', true);
+ $("#request_bills").prop('disabled', true);
+ $("#discount").prop('disabled', true);
+ $("#pay-bill").prop('disabled', true);
+ $("#re-print").prop('disabled', true);
+ }
+
+}
+
+/* For Receipt - Update Balance */
+function update_balance(){
+ var discount_type = $('#discount-type').val();
+ var discount_amount = $('#discount-amount').val();
+ var sub_total = $('#order-sub-total').text();
+ var tax = $('#order-Tax').text();
+
+ // For Percentage Discount
+ if(discount_type == 1){
+ discount_amount=(sub_total*discount_amount)/100;
+ }
+
+ var total = (parseFloat(sub_total) + parseFloat(tax)) - discount_amount;
+ $('#order-discount').text(discount_amount);
+ $('#order-grand-total').text(total);
+}
diff --git a/app/assets/javascripts/origami/redeem_payments.coffee b/app/assets/javascripts/origami/redeem_payments.coffee
new file mode 100644
index 00000000..24f83d18
--- /dev/null
+++ b/app/assets/javascripts/origami/redeem_payments.coffee
@@ -0,0 +1,3 @@
+# Place all the behaviors and hooks related to the matching controller here.
+# All this logic will automatically be available in application.js.
+# You can use CoffeeScript in this file: http://coffeescript.org/
diff --git a/app/assets/javascripts/payment.js b/app/assets/javascripts/payment.js
new file mode 100644
index 00000000..b7aadf05
--- /dev/null
+++ b/app/assets/javascripts/payment.js
@@ -0,0 +1,40 @@
+// number key pad
+$(document).on('click', '.cashier_number', function(event){
+ event.stopPropagation();
+ event.preventDefault();
+ if(event.handled !== true) {
+ var original_value;
+ original_value = $('#amount').text();
+
+ var input_value = $(this).attr("data-value");
+
+ var input_type = $(this).attr("data-type");
+ switch (input_type) {
+ case 'num':
+ if (original_value == "0.0"){
+ $('#amount').text(input_value);
+ }else{
+ $('#amount').append(input_value);
+ }
+ break;
+
+ case 'add':
+ var input_value = $(this).attr("data-value");
+ amount = parseInt(input_value) + parseInt(original_value);
+ $('#amount').html(amount);
+
+ break;
+ case 'clr':
+ $('#amount').html("0.0");
+ break;
+ case 'del' :
+ var cash=$('#amount').text();
+ $('#amount').text(cash.substr(0,cash.length-1));
+ break;
+
+ }
+ event.handled = true;
+ } else {
+ return false;
+ }
+});
diff --git a/app/assets/javascripts/report.js b/app/assets/javascripts/report.js
new file mode 100644
index 00000000..09f74075
--- /dev/null
+++ b/app/assets/javascripts/report.js
@@ -0,0 +1,4 @@
+$(document).on("focus", "[data-behaviour~='datepicker']", function(e){
+ $(this).datepicker({"format": "yyyy-M-dd", "weekStart": 1, "autoclose": true});
+ $('.dropdown-toggle').dropdown();
+});
\ No newline at end of file
diff --git a/app/assets/javascripts/settings/membership_actions.coffee b/app/assets/javascripts/settings/membership_actions.coffee
new file mode 100644
index 00000000..24f83d18
--- /dev/null
+++ b/app/assets/javascripts/settings/membership_actions.coffee
@@ -0,0 +1,3 @@
+# Place all the behaviors and hooks related to the matching controller here.
+# All this logic will automatically be available in application.js.
+# You can use CoffeeScript in this file: http://coffeescript.org/
diff --git a/app/assets/javascripts/settings/orders.coffee b/app/assets/javascripts/settings/orders.coffee
new file mode 100644
index 00000000..24f83d18
--- /dev/null
+++ b/app/assets/javascripts/settings/orders.coffee
@@ -0,0 +1,3 @@
+# Place all the behaviors and hooks related to the matching controller here.
+# All this logic will automatically be available in application.js.
+# You can use CoffeeScript in this file: http://coffeescript.org/
diff --git a/app/assets/javascripts/transactions.js b/app/assets/javascripts/transactions.js
new file mode 100644
index 00000000..12e8ee44
--- /dev/null
+++ b/app/assets/javascripts/transactions.js
@@ -0,0 +1,7 @@
+//= require jquery
+//= require bootstrap
+//= require jquery_ujs
+//= require turbolinks
+//= require cable
+//= require jquery-ui
+//= require bootstrap-datepicker
\ No newline at end of file
diff --git a/app/assets/stylesheets/CRM.scss b/app/assets/stylesheets/CRM.scss
index b0f802f1..a88efe96 100644
--- a/app/assets/stylesheets/CRM.scss
+++ b/app/assets/stylesheets/CRM.scss
@@ -1,9 +1,13 @@
@import "bootstrap";
@import "font-awesome";
@import "theme";
+@import "jquery-ui";
+@import "bootstrap-datepicker3";
/* Show it is fixed to the top */
// body {
// min-height: 75rem;
// padding-top: 4.5rem;
// }
+
+
diff --git a/app/assets/stylesheets/OQS.scss b/app/assets/stylesheets/OQS.scss
index 07c98b85..b516836a 100644
--- a/app/assets/stylesheets/OQS.scss
+++ b/app/assets/stylesheets/OQS.scss
@@ -16,5 +16,6 @@
}
.selected-item {
+ color: #fff !important;
background-color: blue;
}
diff --git a/app/assets/stylesheets/origami/request_bills.scss b/app/assets/stylesheets/api/origami/paypar.scss
similarity index 59%
rename from app/assets/stylesheets/origami/request_bills.scss
rename to app/assets/stylesheets/api/origami/paypar.scss
index 20719090..3ce106bb 100644
--- a/app/assets/stylesheets/origami/request_bills.scss
+++ b/app/assets/stylesheets/api/origami/paypar.scss
@@ -1,3 +1,3 @@
-// Place all the styles related to the origami/RequestBills controller here.
+// Place all the styles related to the api/origami/paypar controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss
index 9456be10..a4fa6b9f 100644
--- a/app/assets/stylesheets/application.scss
+++ b/app/assets/stylesheets/application.scss
@@ -2,6 +2,9 @@
@import "bootstrap";
@import "font-awesome";
@import "theme";
+@import "jquery-ui";
+@import "bootstrap-datepicker3";
+
/* Show it is fixed to the top */
// body {
@@ -57,3 +60,19 @@ ul.dropdown-menu li a{
/*----- Header Bar -----*/
/*----- Header Bar -----*/
+
+/*----- Layout ------ */
+
+.margin-top-20 {
+ margin: 20px 0 0 0;
+}
+
+/*----- Layout ------ */
+
+/*--- Reset --- */
+
+select.form-control {
+ height: inherit !important;
+}
+
+/*--- Reset --- */
diff --git a/app/assets/stylesheets/membership_actions.scss b/app/assets/stylesheets/membership_actions.scss
new file mode 100644
index 00000000..a916dc5b
--- /dev/null
+++ b/app/assets/stylesheets/membership_actions.scss
@@ -0,0 +1,3 @@
+// Place all the styles related to the membership_actions controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/app/assets/stylesheets/orgiami.scss b/app/assets/stylesheets/orgiami.scss
deleted file mode 100644
index b0f802f1..00000000
--- a/app/assets/stylesheets/orgiami.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-@import "bootstrap";
-@import "font-awesome";
-@import "theme";
-
-/* Show it is fixed to the top */
-// body {
-// min-height: 75rem;
-// padding-top: 4.5rem;
-// }
diff --git a/app/assets/stylesheets/origami.scss b/app/assets/stylesheets/origami.scss
new file mode 100644
index 00000000..71a9915e
--- /dev/null
+++ b/app/assets/stylesheets/origami.scss
@@ -0,0 +1,131 @@
+@import "bootstrap";
+@import "font-awesome";
+@import "theme";
+@import "jquery-ui";
+@import "bootstrap-datepicker3";
+
+/* Show it is fixed to the top */
+// body {
+// min-height: 75rem;
+// padding-top: 4.5rem;
+// }
+.others-payment{
+ line-height:100px;
+ text-align:center;
+ color:white;
+ width:300px;
+ height:100px;
+ font-size:18px;
+}
+
+.orders-table {
+ cursor: pointer;
+}
+
+.cashier_number{
+ width: 33%;
+ height:70px;
+ line-height:70px;
+ text-align:center;
+ background:#54A5AF;
+ // float:left;
+ // margin:2px;
+ font-size:20px;
+ color:white;
+ // cursor:pointer;
+}
+
+.del_cashier_number{
+ opacity:0.6,
+}
+
+.pay{
+ width: 98%;
+ height:211px;
+ line-height:211px;
+ text-align:center;
+ font-size:20px;
+ color:white;
+}
+
+.cashier_number:hover{
+ background:#A9F5F2;
+}
+
+.long{
+ width:49%;
+}
+
+.sold {
+ background-color: red;
+}
+
+.paid {
+ background-color: green;
+}
+
+.selected-item {
+ color: #fff !important;
+ background-color: blue !important;
+}
+
+/* Reciept Style */
+#order-charges-table td {
+ border-top: none !important;
+}
+
+.charges-name {
+ width: 80%;
+ text-align: left;
+}
+
+.item-name {
+ width: 60%;
+ text-align: left;
+}
+
+.item-attr {
+ width: 20%;
+ text-align: right;
+}
+
+
+/* Colors */
+.purple {
+ background-color:#7a62d3;
+}
+
+.red {
+ background-color:#ff0000;
+}
+
+.green{
+ background-color: #009900
+}
+
+.left{
+ margin-left:1px;
+}
+
+.bottom{
+ margin-bottom: 1px;
+}
+/*----- Reset -----*/
+
+select.form-control {
+ height: inherit !important;
+}
+
+.form-horizontal .form-group {
+ margin-right: 0px !important;
+}
+
+/* Discount */
+
+.discount-item-row {
+ cursor: pointer;
+}
+
+tr.discount-item-row:hover {
+ background-color: #e3e3e3 !important;
+}
diff --git a/app/assets/stylesheets/origami/redeem_payments.scss b/app/assets/stylesheets/origami/redeem_payments.scss
new file mode 100644
index 00000000..8fdd1e53
--- /dev/null
+++ b/app/assets/stylesheets/origami/redeem_payments.scss
@@ -0,0 +1,3 @@
+// Place all the styles related to the origami/redeem_payments controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/app/assets/stylesheets/settings/membership_actions.scss b/app/assets/stylesheets/settings/membership_actions.scss
new file mode 100644
index 00000000..66eafd50
--- /dev/null
+++ b/app/assets/stylesheets/settings/membership_actions.scss
@@ -0,0 +1,3 @@
+// Place all the styles related to the settings/membership_actions controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/app/assets/stylesheets/settings/orders.scss b/app/assets/stylesheets/settings/orders.scss
new file mode 100644
index 00000000..436ceee1
--- /dev/null
+++ b/app/assets/stylesheets/settings/orders.scss
@@ -0,0 +1,3 @@
+// Place all the styles related to the settings/orders controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/app/assets/stylesheets/transactions.scss b/app/assets/stylesheets/transactions.scss
new file mode 100644
index 00000000..5ca9b171
--- /dev/null
+++ b/app/assets/stylesheets/transactions.scss
@@ -0,0 +1,5 @@
+@import "bootstrap";
+@import "font-awesome";
+@import "theme";
+@import "jquery-ui";
+@import "bootstrap-datepicker3";
\ No newline at end of file
diff --git a/app/controllers/api/bill_controller.rb b/app/controllers/api/bill_controller.rb
index d4940907..6b1fb225 100644
--- a/app/controllers/api/bill_controller.rb
+++ b/app/controllers/api/bill_controller.rb
@@ -8,12 +8,18 @@ class Api::BillController < Api::ApiController
#create Bill by Booking ID
if (params[:booking_id])
- @sale = Sale.new
- @status = @sale.generate_invoice_from_booking(params[:booking_id], current_login_employee.name)
-
+ booking = Booking.find(params[:booking_id])
+ if booking
+ if booking.sale_id.nil?
+ @sale = Sale.new
+ @status, @sale_id = @sale.generate_invoice_from_booking(params[:booking_id], current_login_employee)
+ else
+ @status = true
+ end
+ end
elsif (params[:order_id])
@sale = Sale.new
- @status = @sale.generate_invoice_from_order(params[:order_id], current_login_employee.name)
+ @status, @sale_id = @sale.generate_invoice_from_order(params[:order_id], current_login_employee)
end
end
diff --git a/app/controllers/api/customers_controller.rb b/app/controllers/api/customers_controller.rb
index 8ce2041c..2adc7c8a 100644
--- a/app/controllers/api/customers_controller.rb
+++ b/app/controllers/api/customers_controller.rb
@@ -9,4 +9,9 @@ class Api::CustomersController < ActionController::API
def show
@customer = Customer.find_by(params[:id])
end
+
+ #Show customer detail by Order item
+ def get_customer_order
+ @customer = Customer.find(params[:id])
+ end
end
diff --git a/app/controllers/api/invoices_controller.rb b/app/controllers/api/invoices_controller.rb
index 7d6e2cb7..aedfc9f7 100644
--- a/app/controllers/api/invoices_controller.rb
+++ b/app/controllers/api/invoices_controller.rb
@@ -1,6 +1,6 @@
class Api::InvoicesController < ActionController::API
- before :authenticate_token
- before :set_sale_params, only:[:show, :update, :destroy]
+ # before :authenticate_token
+ # before :set_sale_params, only:[:show, :update, :destroy]
#List open invoices for today.
def index
diff --git a/app/controllers/api/memberships_controller.rb b/app/controllers/api/memberships_controller.rb
index 6b125868..ea5b5279 100644
--- a/app/controllers/api/memberships_controller.rb
+++ b/app/controllers/api/memberships_controller.rb
@@ -1,5 +1,5 @@
class Api::MembershipsController < ActionController::API
- before :authenticate_token
+ #before :authenticate_token
#Add Membership to invoice
diff --git a/app/controllers/api/orders_controller.rb b/app/controllers/api/orders_controller.rb
index 443a754b..08847f6f 100644
--- a/app/controllers/api/orders_controller.rb
+++ b/app/controllers/api/orders_controller.rb
@@ -28,33 +28,31 @@ class Api::OrdersController < Api::ApiController
@order = Order.new
@order.source = params[:order_source]
@order.order_type = params[:order_type]
- @order.customer_id = params[:customer_id]
+ @order.customer_id = params[:customer_id] == ""? "CUS-000000000001" : params[:customer_id] # for no customer id from mobile
@order.items = params[:order_items]
@order.guest = params[:guest_info]
@order.table_id = params[:table_id]
@order.new_booking = true
- #@order.employee_name = "Emenu"
@order.employee_name = current_login_employee.name
-
-
#Create Table Booking or Room Booking
- if !params["booking_id"].nil? && params[:booking_id].to_i > 0
- #@order.new_booking = false
- @order.new_booking = true
- @order.booking_id = params[:booking_id]
+ if !params["booking_id"].nil?
+ # check booking id is already completed.
+ booking = Booking.find(params[:booking_id])
+ if !booking.sale_id.nil?
+ if booking.sale.sale_status == "completed" || booking.sale.sale_status == "billed"
+ @order.new_booking = true
+ else
+ @order.new_booking = false
+ @order.booking_id = params[:booking_id]
+ end
+ else
+ @order.new_booking = false
+ @order.booking_id = params[:booking_id]
+ puts "booking sale is null"
+ end
end
@status, @booking = @order.generate
-
- # rescue Exception => error
- # @status = false
- # @error_messages = "Exception has occurs on System"
- #
- # logger.fatal("Exception Raise - " + error.message)
- # end
-
-
-
end
# Description
diff --git a/app/controllers/api/payments_controller.rb b/app/controllers/api/payments_controller.rb
index 2c2d219b..39219c6b 100644
--- a/app/controllers/api/payments_controller.rb
+++ b/app/controllers/api/payments_controller.rb
@@ -29,56 +29,56 @@ class Api::PaymentsController < ActionController::API
#:received_amount, :card_payment_reference, :vochure_no, :giftcard_no,
#:customer_id, :external_payment_status
- switch (payment_method)
- case "cash"
+ case payment_method
+ when "cash"
sale_payment.payment_method = "cash"
sale_payment.received_amount = params[:amount]
@status, @invoice = sale_payment.process_payment(sale_payment, current_login_employee.name)
- case "creditnote"
+ when "creditnote"
sale_payment.payment_method = "creditnote"
sale_payment.received_amount = params[:amount]
sale_payment.customer_id = params[:customer_id]
@status, @invoice = sale_payment.process_payment(sale_payment, current_login_employee.name)
- case "visa"
+ when "visa"
sale_payment.payment_method = "visa"
sale_payment.received_amount = params[:amount]
sale_payment.payment_reference = params[:payment_reference]
@status, @invoice = sale_payment.process_payment(sale_payment, current_login_employee.name)
- case "master"
+ when "master"
sale_payment.payment_method = "master"
sale_payment.received_amount = params[:amount]
sale_payment.payment_reference = params[:payment_reference]
@status, @invoice = sale_payment.process_payment(sale_payment, current_login_employee.name)
- case "jcb"
+ when "jcb"
sale_payment.payment_method = "jcb"
sale_payment.received_amount = params[:amount]
sale_payment.payment_reference = params[:payment_reference]
@status, @invoice = sale_payment.process_payment(sale_payment, current_login_employee.name)
- case "mpu"
+ when "mpu"
sale_payment.payment_method = "mpu"
sale_payment.received_amount = params[:amount]
sale_payment.payment_reference = params[:payment_reference]
@status, @invoice = sale_payment.process_payment(sale_payment, current_login_employee.name)
- case "unionpay"
+ when "unionpay"
sale_payment.payment_method = "unionpay"
sale_payment.received_amount = params[:amount]
sale_payment.payment_reference = params[:payment_reference]
@status, @invoice = sale_payment.process_payment(sale_payment, current_login_employee.name)
- case "vochure"
+ when "vochure"
sale_payment.payment_method = "vochure"
sale_payment.received_amount = params[:amount]
sale_payment.customer_id = params[:customer_id]
sale_payment.payment_reference = params[:vochure_no]
@status, @invoice = sale_payment.process_payment(sale_payment, current_login_employee.name)
- case "giftcard"
+ when "giftcard"
sale_payment.payment_method = "giftcard"
sale_payment.received_amount = params[:amount]
sale_payment.customer_id = params[:customer_id]
sale_payment.payment_reference = params[:giftcard_no]
@status, @invoice = sale_payment.process_payment(sale_payment, current_login_employee.name)
- case "paypar"
+ when "paypar"
sale_payment.payment_method = "paypar"
sale_payment.received_amount = params[:amount]
sale_payment.payment_reference = params[:payment_reference]
diff --git a/app/controllers/base_report_controller.rb b/app/controllers/base_report_controller.rb
new file mode 100644
index 00000000..c1ae1a01
--- /dev/null
+++ b/app/controllers/base_report_controller.rb
@@ -0,0 +1,77 @@
+class BaseReportController < ActionController::Base
+ include LoginVerification
+ layout "application"
+
+ #before_action :check_installation
+ protect_from_forgery with: :exception
+
+ PERIOD = {
+ "today" => 0,
+ "yesterday" => 1,
+ "this_week" => 2,
+ "last_week" => 3,
+ "last_7" => 4,
+ "this_month" => 5,
+ "last_month" => 6,
+ "last_30" => 7,
+ "this_year" => 8,
+ "last_year" => 9
+ }
+
+ def get_date_range_from_params
+ period_type = params[:period_type]
+ period = params[:period]
+ from = params[:from]
+ to = params[:to]
+ day_ref = Time.now
+ if period_type.to_i == 1
+ if params[:from] && params[:to]
+ if params[:from] != "" && params[:to] !=""
+ from = DateTime.strptime(params[:from], "%m/%d/%Y")
+ to = DateTime.strptime(params[:to], "%m/%d/%Y")
+ else
+ from = day_ref.beginning_of_day.utc
+ to = day_ref.end_of_day.utc
+ end
+ end
+ else
+ case period.to_i
+ when PERIOD["today"]
+
+ from = day_ref.beginning_of_day.utc
+ to = day_ref.end_of_day.utc
+
+ when PERIOD["yesterday"]
+ from = (day_ref - 1.day).beginning_of_day.utc
+ to = (day_ref - 1.day).end_of_day.utc
+
+ when PERIOD["this_week"]
+ from = Time.now.beginning_of_week.utc
+ to = Time.now.utc
+ when PERIOD["last_week"]
+ from = (day_ref - 7.day).beginning_of_week.utc
+ to = (day_ref - 7.day).end_of_week.utc
+ when PERIOD["last_7"]
+ from = (day_ref - 7.day).utc
+ to = Time.now.utc
+ when PERIOD["this_month"]
+ from = Time.now.beginning_of_month.utc
+ to = Time.now.utc
+ when PERIOD["last_month"]
+ from = (day_ref - 1.month).beginning_of_month.utc
+ to = (day_ref - 1.month).end_of_month.utc
+ when PERIOD["last_30"]
+ from = (day_ref - 30.day).utc
+ to = Time.now.utc
+ when PERIOD["this_year"]
+ from = Time.now.beginning_of_year.utc
+ to = Time.now.utc
+ when PERIOD["last_year"]
+ from = (day_ref - 1.year).beginning_of_year.utc
+ to = (day_ref - 1.year).end_of_year.utc
+ end
+ end
+ return from, to
+ end
+
+end
diff --git a/app/controllers/crm/bookings_controller.rb b/app/controllers/crm/bookings_controller.rb
index eeb19f75..65511512 100644
--- a/app/controllers/crm/bookings_controller.rb
+++ b/app/controllers/crm/bookings_controller.rb
@@ -1,4 +1,4 @@
-class Crm::BookingsController < ApplicationController
+class Crm::BookingsController < BaseCrmController
def update_booking
booking = Booking.find(params[:booking_id])
diff --git a/app/controllers/crm/customers_controller.rb b/app/controllers/crm/customers_controller.rb
index 4e97faec..4cacae00 100644
--- a/app/controllers/crm/customers_controller.rb
+++ b/app/controllers/crm/customers_controller.rb
@@ -1,20 +1,73 @@
-class Crm::CustomersController < ApplicationController
+class Crm::CustomersController < BaseCrmController
before_action :set_crm_customer, only: [:show, :edit, :update, :destroy]
# GET /crm/customers
# GET /crm/customers.json
def index
- @crm_customers = Crm::Customer.all
+ filter = params[:filter]
+
+ if filter.nil?
+ @crm_customers = Customer.order("customer_id").page(params[:page])
+ #@products = Product.order("name").page(params[:page]).per(5)
+ else
+ @crm_customers = Customer.search(filter)
+
+ end
+ #@crm_customers = Customer.all
+ @crm_customers = Kaminari.paginate_array(@crm_customers).page(params[:page]).per(50)
+ @crm_customer = Customer.new
+
+ # if flash["errors"]
+ # @crm_customer.valid?
+ # end
+ # @membership = Customer.get_member_group
+ # if @membership["status"] == true
+ # @member_group = @membership["data"]
+ # end
+ respond_to do |format|
+ format.html # index.html.erb
+ format.json { render json: @crm_customers }
+ end
end
# GET /crm/customers/1
# GET /crm/customers/1.json
def show
+ @orders = Order.where("customer_id=?", params[:id])
+ @sales = Sale.where("customer_id=?", params[:id])
+
+ if @orders
+ @order_items = []
+ @orders.each do |order|
+ @order_items = @order_items + order.order_items
+ end
+ end
+ if @sales
+ @sale_items = []
+ @sales.each do |sale|
+ @sale_items = @sale_items + sale.sale_items
+ end
+ end
+
+ #get customer amount
+ @customer = Customer.find(params[:id])
+ response = Customer.get_member_account(@customer)
+
+ if(response["status"] == true)
+ @membership = response["data"]
+ else
+ @membership = 0
+ end
+
+ #end customer amount
+
end
# GET /crm/customers/new
def new
- @crm_customer = Crm::Customer.new
+ @crm_customer = Customer.new
+ @membership = Customer.get_member_group()
+
end
# GET /crm/customers/1/edit
@@ -23,31 +76,109 @@ class Crm::CustomersController < ApplicationController
# POST /crm/customers
# POST /crm/customers.json
- def create
- @crm_customer = Crm::Customer.new(crm_customer_params)
+ def create
+ @crm_customers = Customer.new(customer_params)
+
respond_to do |format|
- if @crm_customer.save
- format.html { redirect_to @crm_customer, notice: 'Customer was successfully created.' }
- format.json { render :show, status: :created, location: @crm_customer }
+ puts @crm_customers.errors.to_json
+ if @crm_customers.save
+ name = customer_params[:name]
+ phone = customer_params[:contact_no]
+ email = customer_params[:email]
+ dob = customer_params[:date_of_birth]
+ member_group_id = params[:member_group_id]
+
+ membership = MembershipSetting.find_by_membership_type("paypar_url")
+ memberaction = MembershipAction.find_by_membership_type("create_membership_customer")
+ merchant_uid = memberaction.merchant_account_id.to_s
+ auth_token = memberaction.auth_token.to_s
+ url = membership.gateway_url.to_s + memberaction.gateway_url.to_s
+
+ response = HTTParty.post(url, :body => { name: name,phone: phone,email: email,
+ dob: dob,
+ member_group_id: member_group_id,merchant_uid:merchant_uid,auth_token:auth_token}.to_json,
+ :headers => {
+ 'Content-Type' => 'application/json',
+ 'Accept' => 'application/json'
+ }
+ )
+
+ if response["status"] == true
+
+ customer = Customer.find(@crm_customers.customer_id)
+ status = customer.update_attributes(membership_id: response["customer_datas"]["id"])
+
+ if params[:sale_id]
+ format.html { redirect_to '/origami/'+params[:sale_id]+'/customers', notice: 'Customer was successfully created.' }
+ else
+ format.html { redirect_to crm_customers_path, notice: 'Customer was successfully created'}
+ end
+ # format.json { render :index, status: :created, location: @crm_customers }
+ else
+
+ @crm_customers.destroy
+ if params[:sale_id]
+ format.html { redirect_to '/origami/'+params[:sale_id]+'/customers'}
+ else
+ format.html { redirect_to crm_customers_path, notice: response["message"] }
+ end
+ end
else
- format.html { render :new }
- format.json { render json: @crm_customer.errors, status: :unprocessable_entity }
+
+ if params[:sale_id]
+ flash[:errors] = @crm_customers.errors
+ format.html { redirect_to '/origami/'+params[:sale_id]+'/customers'}
+ format.json { render json: @crm_customers.errors, status: :unprocessable_entity }
+ else
+ flash[:errors] = @crm_customers.errors
+ format.html { redirect_to crm_customers_path}
+ format.json { render json: @crm_customers.errors, status: :unprocessable_entity }
+ end
end
- end
+
end
+end
# PATCH/PUT /crm/customers/1
# PATCH/PUT /crm/customers/1.json
def update
+
respond_to do |format|
- if @crm_customer.update(crm_customer_params)
- format.html { redirect_to @crm_customer, notice: 'Customer was successfully updated.' }
+ if @crm_customer.update(customer_params)
+
+ name = customer_params[:name]
+ phone = customer_params[:contact_no]
+ email = customer_params[:email]
+ dob = customer_params[:date_of_birth]
+ id = @crm_customer.membership_id
+ member_group_id = params[:member_group_id]
+
+ membership = MembershipSetting.find_by_membership_type("paypar_url")
+ memberaction = MembershipAction.find_by_membership_type("update_membership_customer")
+ merchant_uid = memberaction.merchant_account_id.to_s
+ auth_token = memberaction.auth_token.to_s
+ url = membership.gateway_url.to_s + memberaction.gateway_url.to_s
+
+ response = HTTParty.post(url, :body => { name: name,phone: phone,email: email,
+ dob: dob,
+ id: id,member_group_id:member_group_id,merchant_uid:merchant_uid,auth_token:auth_token}.to_json,
+ :headers => {
+ 'Content-Type' => 'application/json',
+ 'Accept' => 'application/json'
+ }
+ )
+
+ format.html { redirect_to crm_customers_path, notice: 'Customer was successfully updated.' }
format.json { render :show, status: :ok, location: @crm_customer }
+
else
- format.html { render :edit }
+
+ flash[:errors] = @crm_customers.errors
+ format.html { redirect_to crm_customers_path}
format.json { render json: @crm_customer.errors, status: :unprocessable_entity }
end
+
end
end
@@ -64,11 +195,12 @@ class Crm::CustomersController < ApplicationController
private
# Use callbacks to share common setup or constraints between actions.
def set_crm_customer
- @crm_customer = Crm::Customer.find(params[:id])
+ @crm_customer = Customer.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
- def crm_customer_params
- params.require(:crm_customer).permit(:name, :company, :contact_no, :email, :date_of_birth, :membership_id, :membership_type, :membership_authentication_code)
+ def customer_params
+
+ params.require(:customer).permit(:name, :company, :contact_no, :email, :date_of_birth)
end
end
diff --git a/app/controllers/crm/dining_queues_controller.rb b/app/controllers/crm/dining_queues_controller.rb
new file mode 100644
index 00000000..41655d98
--- /dev/null
+++ b/app/controllers/crm/dining_queues_controller.rb
@@ -0,0 +1,84 @@
+class Crm::DiningQueuesController < BaseCrmController
+ before_action :set_dining_queue, only: [:show, :edit, :update, :destroy]
+
+ # GET /crm/dining_queues
+ # GET /crm/dining_queues.json
+ def index
+ @dining_queues = DiningQueue.all
+ end
+
+ # GET /crm/dining_queues/1
+ # GET /crm/dining_queues/1.json
+ def show
+ end
+
+ # GET /crm/dining_queues/new
+ def new
+ @dining_queue = DiningQueue.new
+ @queue_no = DiningQueue.generate_queue_no
+ end
+
+ # GET /crm/dining_queues/1/edit
+ def edit
+ end
+
+ # POST /crm/dining_queues
+ # POST /crm/dining_queues.json
+ def create
+ @dining_queue = DiningQueue.new(dining_queue_params)
+
+ respond_to do |format|
+ if @dining_queue.save
+
+ unique_code = "QueueNoPdf"
+
+ # get printer info
+ print_settings = PrintSetting.find_by_unique_code(unique_code)
+
+ printer = Printer::ReceiptPrinter.new(print_settings)
+ printer.print_queue_no(print_settings,@dining_queue)
+
+ format.html { redirect_to crm_dining_queues_path, notice: 'Dining queue was successfully created.' }
+ format.json { render :show, status: :created, location: @dining_queue }
+ else
+ format.html { render :new }
+ format.json { render json: @dining_queue.errors, status: :unprocessable_entity }
+ end
+ end
+ end
+
+ # PATCH/PUT /crm/dining_queues/1
+ # PATCH/PUT /crm/dining_queues/1.json
+ def update
+ respond_to do |format|
+ if @dining_queue.update(dining_queue_params)
+ format.html { redirect_to crm_dining_queues_path, notice: 'Dining queue was successfully updated.' }
+ format.json { render :show, status: :ok, location: @dining_queue }
+ else
+ format.html { render :edit }
+ format.json { render json: @dining_queue.errors, status: :unprocessable_entity }
+ end
+ end
+ end
+
+ # DELETE /crm/dining_queues/1
+ # DELETE /crm/dining_queues/1.json
+ def destroy
+ @dining_queue.destroy
+ respond_to do |format|
+ format.html { redirect_to crm_dining_queues_path, notice: 'Dining queue was successfully destroyed.' }
+ format.json { head :no_content }
+ end
+ end
+
+ private
+ # Use callbacks to share common setup or constraints between actions.
+ def set_dining_queue
+ @dining_queue = DiningQueue.find(params[:id])
+ end
+
+ # Never trust parameters from the scary internet, only allow the white list through.
+ def dining_queue_params
+ params.require(:dining_queue).permit(:name, :contact_no, :queue_no)
+ end
+end
diff --git a/app/controllers/crm/home_controller.rb b/app/controllers/crm/home_controller.rb
index 083f2bf7..c05e7cf3 100644
--- a/app/controllers/crm/home_controller.rb
+++ b/app/controllers/crm/home_controller.rb
@@ -1,24 +1,60 @@
class Crm::HomeController < BaseCrmController
def index
- @booking = Booking.all
+ @booking = Booking.all
@customer = Customer.all
-
- #@booking = Booking.select("bookings.id as booking_id,
- # bookings.checkin_at,
- # bookings.checkin_by,
- # bookings.dining_facility_id,
- # od.customer_id as customer,
- # od.id as order_id,
- # od.item_count as count,
- # odt.id as order_item_id,
- # odt.item_name as item_name")
- # .joins("join booking_orders as bko ON bko.booking_id = bookings.id")
- # .joins("right join orders as od ON od.id = bko.order_id")
- # .joins("right join order_items as odt ON odt.order_id=od.id")
- # .order("bookings.id DESC")
+ from = Time.now.beginning_of_day.utc
+ to = Time.now.end_of_day.utc
+ @queue = DiningQueue.where('created_at BETWEEN ? AND ?', from, to).order('queue_no ASC')
+
+ # .where("dining_facilities.is_active=? and orders.date between ? and ?",true,from,to)
end
+
def show
end
+
+ #print for crm
+ def print_order
+
+ @booking = Booking.find(params[:id])
+
+ @total_amount = 0.00
+ @total_tax = 0.00
+
+ if @booking.booking_orders
+ order_items = []
+ @booking.booking_orders.each do |bo|
+ order = Order.find(bo.order_id)
+ #if (order.status == "new")
+ order_items = order_items + order.order_items
+ #end
+ end
+
+ end
+
+ unique_code="CrmOrderPdf"
+
+ print_settings = PrintSetting.find_by_unique_code(unique_code)
+
+ printer = Printer::ReceiptPrinter.new(print_settings)
+
+ printer.print_crm_order(@booking,order_items,print_settings)
+
+ end
+
+ # def update_sale_by_customer
+
+ # sale = Sale.find(params[:sale_id])
+ # status = sale.update_attributes(customer_id: params[:customer_id])
+
+ # if status == true
+ # render json: JSON.generate({:status => true})
+ # else
+ # render json: JSON.generate({:status => false, :error_message => "Record not found"})
+
+ # end
+ # end
+
end
+
diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb
index c3dba58b..29e9082a 100644
--- a/app/controllers/home_controller.rb
+++ b/app/controllers/home_controller.rb
@@ -10,12 +10,20 @@ class HomeController < ApplicationController
@login_form.emp_id = params[:login_form][:emp_id]
@login_form.password = params[:login_form][:password]
@employee = Employee.login(@login_form.emp_id, @login_form.password)
- if @employee
- session[:session_token] = @employee.token_session
- redirect_to dashboard_path
- else
- render :index
- end
+
+ if @employee != nil
+ if @employee.role == "administrator"
+ session[:session_token] = @employee.token_session
+ redirect_to dashboard_path
+ elsif @employee.role == "cashier"
+ session[:session_token] = @employee.token_session
+ redirect_to origami_root_path
+ else
+ render :index
+ end
+ else
+ redirect_to origami_root_path, :notice => "Username and Password dosn't match!"
+ end
end
diff --git a/app/controllers/oqs/home_controller.rb b/app/controllers/oqs/home_controller.rb
index 1292a5e6..7af42166 100644
--- a/app/controllers/oqs/home_controller.rb
+++ b/app/controllers/oqs/home_controller.rb
@@ -27,23 +27,31 @@ class Oqs::HomeController < BaseOqsController
# update delivery status when complete click
def update_delivery_status
+ removed_item = []
assigned_item_id = params[:id]
assigned_item=AssignedOrderItem.find(assigned_item_id)
- assigned_item.delivery_status=true
- assigned_item.save
+ assigned_items=AssignedOrderItem.where("item_code='" + assigned_item.item_code + "' AND " + "order_id='" + assigned_item.order_id + "'");
+
+ # update delivery status for completed same order items
+ assigned_items.each do |ai|
+ ai.delivery_status=true
+ ai.save
+ removed_item.push(ai.assigned_order_item_id)
+ end
+ render :json => removed_item.to_json
end
# Query for OQS with status
def queue_items_query(status)
- AssignedOrderItem.select("assigned_order_items.id, oqs.station_name, oqs.is_active, df.name as zone, odt.item_code, odt.item_name, odt.price, odt.qty, odt.item_order_by, cus.name as customer_name, odt.created_at")
- .joins("join order_queue_process_by_zones as oqpz ON oqpz.order_queue_station_id = assigned_order_items.order_queue_station_id
+ AssignedOrderItem.select("assigned_order_items.assigned_order_item_id, oqs.station_name, oqs.is_active, df.name as zone, odt.item_code, odt.item_name, odt.price, odt.qty, odt.item_order_by, cus.name as customer_name, odt.created_at")
+ .joins(" left join order_queue_process_by_zones as oqpz ON oqpz.order_queue_station_id = assigned_order_items.order_queue_station_id
left join dining_facilities as df on df.zone_id = oqpz.zone_id
left join order_queue_stations as oqs ON oqs.id = assigned_order_items.order_queue_station_id
- left join orders as od ON od.id = assigned_order_items.order_id
+ left join orders as od ON od.order_id = assigned_order_items.order_id
left join order_items as odt ON odt.item_code = assigned_order_items.item_code
- left join customers as cus ON cus.id = od.customer_id")
+ left join customers as cus ON cus.customer_id = od.customer_id")
.where("assigned_order_items.delivery_status = #{status}")
- .group("assigned_order_items.id")
+ .group("assigned_order_items.assigned_order_item_id")
.order("odt.item_name DESC")
end
end
diff --git a/app/controllers/oqs/print_controller.rb b/app/controllers/oqs/print_controller.rb
index 368a513d..ecbc94e7 100644
--- a/app/controllers/oqs/print_controller.rb
+++ b/app/controllers/oqs/print_controller.rb
@@ -1,16 +1,45 @@
class Oqs::PrintController < ApplicationController
+ # Print Order Item
def print
unique_code="OrderItemPdf"
assigned_item_id=params[:id]
- assigned_order_item=AssignedOrderItem.select("order_id, item_code").where('id='+assigned_item_id)
+ assigned_item=AssignedOrderItem.find(assigned_item_id)
+ assigned_items=AssignedOrderItem.where("item_code='" + assigned_item.item_code + "' AND " + "order_id='" + assigned_item.order_id + "'");
+ # printer for each stations
+ printer_name = assigned_item.order_queue_station.printer_name
+
+ # print when complete click
print_settings=PrintSetting.find_by_unique_code(unique_code)
order_queue_printer= Printer::OrderQueuePrinter.new(print_settings)
- order_queue_printer.print_order_item(print_settings,assigned_order_item[0].order_id, assigned_order_item[0].item_code )
+ order_queue_printer.print_order_item(printer_name,assigned_item.order_id, assigned_item.item_code )
+
+ # update print status for completed same order items
+ assigned_items.each do |ai|
+ ai.print_status=true
+ ai.save
+ end
+ end
- # update print status when complete click
- assigned_item=AssignedOrderItem.find(assigned_item_id)
- assigned_item.print_status=true
- assigned_item.save
+ # Print Order Details
+ def print_order_summary
+ unique_code="OrderSummaryPdf"
+ assigned_item_id=params[:id]
+ assigned_item=AssignedOrderItem.find(assigned_item_id)
+ assigned_items=AssignedOrderItem.where("item_code='" + assigned_item.item_code + "' AND " + "order_id='" + assigned_item.order_id + "'");
+
+ # printer for each stations
+ printer_name = assigned_item.order_queue_station.printer_name
+
+ # print when complete click
+ print_settings=PrintSetting.find_by_unique_code(unique_code)
+ order_queue_printer= Printer::OrderQueuePrinter.new(print_settings)
+ order_queue_printer.print_order_summary(printer_name,assigned_item.order_id)
+
+ # update print status for completed same order items
+ assigned_items.each do |ai|
+ ai.print_status=true
+ ai.save
+ end
end
end
diff --git a/app/controllers/origami/card_payments_controller.rb b/app/controllers/origami/card_payments_controller.rb
new file mode 100644
index 00000000..1d18e401
--- /dev/null
+++ b/app/controllers/origami/card_payments_controller.rb
@@ -0,0 +1,29 @@
+class Origami::CardPaymentsController < BaseOrigamiController
+
+
+ def index
+ @membership_rebate_balance = 0
+ @membership_id = 0
+ if !@membership_id.nil?
+ membership_setting = MembershipSetting.find_by_membership_type("paypar_url")
+ membership_data = SalePayment.get_paypar_account(membership_setting.gateway_url,membership_setting.auth_token,@membership_id)
+ if membership_data["status"]==true
+ membership_account_data = membership_data["data"];
+ membership_account_data.each do |acc_data|
+ if acc_data["accountable_type"] == "REBATEACCOUNT"
+ @membership_rebate_balance=acc_data["balance"]
+ else
+ @membership_rebate_balance = 0
+ end
+ end
+ else
+ @membership_rebate_balance = 0
+ end
+ end
+
+ end
+
+ def create
+ end
+
+end
diff --git a/app/controllers/origami/credit_payments_controller.rb b/app/controllers/origami/credit_payments_controller.rb
new file mode 100644
index 00000000..a348951e
--- /dev/null
+++ b/app/controllers/origami/credit_payments_controller.rb
@@ -0,0 +1,10 @@
+class Origami::CreditPaymentsController < BaseOrigamiController
+
+
+ def index
+ end
+
+ def create
+ end
+
+end
diff --git a/app/controllers/origami/customers_controller.rb b/app/controllers/origami/customers_controller.rb
index d9bfc39b..601055e5 100644
--- a/app/controllers/origami/customers_controller.rb
+++ b/app/controllers/origami/customers_controller.rb
@@ -1,7 +1,43 @@
class Origami::CustomersController < BaseOrigamiController
#Form to add customer -
def index
+
+
end
- def create
+
+ # GET /crm/customers/1
+ # GET /crm/customers/1.json
+ def show
end
+
+ def add_customer
+
+ @sale_id = params[:sale_id]
+ filter = params[:filter]
+
+ filter = params[:filter]
+
+ if filter.nil?
+ @crm_customers = Customer.order("customer_id").page(params[:page])
+ #@products = Product.order("name").page(params[:page]).per(5)
+ else
+ @crm_customers = Customer.search(filter)
+
+ end
+ #@crm_customers = Customer.all
+ @crm_customers = Kaminari.paginate_array(@crm_customers).page(params[:page]).per(50)
+ @crm_customer = Customer.new
+
+ # if flash["errors"]
+ # @crm_customer.valid?
+ # end
+
+ respond_to do |format|
+ # format.html { render :template => "crm/customers/index" }
+ format.html { render action: "index"}
+ format.json { render json: @crm_customers }
+ end
+ end
+
+
end
diff --git a/app/controllers/origami/discounts_controller.rb b/app/controllers/origami/discounts_controller.rb
index 09ab1103..f5f7db9e 100644
--- a/app/controllers/origami/discounts_controller.rb
+++ b/app/controllers/origami/discounts_controller.rb
@@ -1,6 +1,57 @@
class Origami::DiscountsController < BaseOrigamiController
+
+ #discount page show from origami index with selected order
def index
+ sale_id = params[:id]
+ if Sale.exists?(sale_id)
+ @sale_data = Sale.find(sale_id)
+ end
end
+
+ #discount for selected order
def create
+ sale_id = params[:sale_id]
+ sale_item_id = params[:sale_item_id]
+ discount_type = params[:discount_type]
+ discount_value = params[:discount_value]
+ discount_amount = params[:discount_amount]
+ grand_total = params[:grand_total]
+ product_name = "Overall Discount"
+
+ if discount_type == 0
+ remark="Discount " + discount_amount + " as net"
+ else
+ remark="Discount " + discount_amount + " as percentage"
+ end
+
+ #update discount for sale
+ sale = Sale.find(sale_id)
+ sale.total_discount = sale.total_discount + discount_amount.to_f
+ sale.grand_total = grand_total
+ sale.save
+
+ #save sale item for discount
+ if sale_item_id != nil
+ origin_sale_item = SaleItem.find(sale_item_id)
+ product_name = origin_sale_item.product_name + "-Disocunt"
+ end
+ sale_item = SaleItem.new
+
+ #pull
+ sale_item.sale_id = sale_id
+ sale_item.product_code = origin_sale_item != nil ? origin_sale_item.product_code : sale_id
+ sale_item.product_name = product_name
+ sale_item.remark = remark
+
+ sale_item.qty = 1
+ sale_item.unit_price = (0-discount_amount.to_f)
+ sale_item.taxable_price = discount_amount
+ sale_item.is_taxable = 0
+
+ sale_item.price = sale_item.qty * sale_item.unit_price
+ sale_item.save
+
+ redirect_to origami_path(sale_id)
end
+
end
diff --git a/app/controllers/origami/home_controller.rb b/app/controllers/origami/home_controller.rb
index cbca1424..dbde3293 100644
--- a/app/controllers/origami/home_controller.rb
+++ b/app/controllers/origami/home_controller.rb
@@ -1,15 +1,83 @@
class Origami::HomeController < BaseOrigamiController
def index
- @order_table = Order.get_order_table()
- @order_rooms = Order.get_order_rooms()
- @orders = Order.get_orders()
- end
- def show
- str = []
- @order_details = OrderItem.get_order_items_details(params[:order_id])
- @order_details.each do |ord_detail|
- str.push(ord_detail)
+ if params[:booking_id] != nil
+ type=params[:booking_id].split('-')[0];
+ # Sale
+ if type == "SAL"
+ @selected_item = Sale.find(params[:booking_id])
+ @selected_item_type="Sale"
+ # Booking
+ else
+ @selected_item = Order.find(params[:booking_id])
+ @selected_item_type="Order"
+ end
end
- render :json => str.to_json
+
+ @completed_orders = Order.get_completed_order()
+ @booking_orders = Order.get_booking_order_table()
+ @booking_rooms = Order.get_booking_order_rooms()
+ @orders = Order.get_orders()
+ end
+
+ def item_show
+ selection(params[:booking_id],1)
+ end
+
+ def selection(selected_id, is_ajax)
+ str = []
+ type=selected_id.split('-')[0];
+ # Sale
+ if type == "SAL"
+ @order_details = SaleItem.get_order_items_details(params[:booking_id])
+ @order_details.each do |ord_detail|
+ str.push(ord_detail)
+ end
+ # Booking
+ else
+ @order_details = OrderItem.get_order_items_details(params[:booking_id])
+ @order_details.each do |ord_detail|
+ str.push(ord_detail)
+ end
+ end
+ if is_ajax == 1
+ render :json => str.to_json
+ else
+ str
+ end
end
+
+ def update_sale_by_customer
+
+ id = params[:sale_id][0,3]
+ if(id == "SAL")
+ sale = Sale.find(params[:sale_id])
+ else
+ sale = Order.find(params[:sale_id])
+ end
+
+ status = sale.update_attributes(customer_id: params[:customer_id])
+
+ if status == true
+ render json: JSON.generate({:status => true})
+ else
+ render json: JSON.generate({:status => false, :error_message => "Record not found"})
+
+ end
+ end
+
+ def get_customer
+
+ @customer = Customer.find(params[:customer_id])
+
+ response = Customer.get_member_account(@customer)
+
+ respond_to do |format|
+ format.js do
+ render :json => {
+ :response_data => response.as_json,
+ :customer => @customer}
+ end
+ end
+ end
+
end
diff --git a/app/controllers/origami/jcb_controller.rb b/app/controllers/origami/jcb_controller.rb
new file mode 100644
index 00000000..5bed3470
--- /dev/null
+++ b/app/controllers/origami/jcb_controller.rb
@@ -0,0 +1,32 @@
+class Origami::JcbController < BaseOrigamiController
+
+ def index
+ @sale_id = params[:sale_id]
+
+ # limit jcb_amount
+ sale_data = Sale.find_by_sale_id(@sale_id)
+ total = sale_data.grand_total
+ @jcbcount = 0
+ others = 0
+ sale_data.sale_payments.each do |sale_payment|
+ if sale_payment.payment_method == "jcb"
+ @jcbcount = @jcbcount + sale_payment.payment_amount
+ else
+ others = others + sale_payment.payment_amount
+ end
+ end
+ @can_jcb = total - @jcbcount - others
+
+ end
+
+ def create
+ cash = params[:amount]
+ sale_id = params[:sale_id]
+ if(Sale.exists?(sale_id))
+ saleObj = Sale.find(sale_id)
+ sale_payment = SalePayment.new
+ @status, @sale = sale_payment.process_payment(saleObj, @user, cash, "jcb")
+ end
+ end
+
+end
diff --git a/app/controllers/origami/master_controller.rb b/app/controllers/origami/master_controller.rb
new file mode 100644
index 00000000..67107167
--- /dev/null
+++ b/app/controllers/origami/master_controller.rb
@@ -0,0 +1,31 @@
+class Origami::MasterController < BaseOrigamiController
+
+ def index
+ @sale_id = params[:sale_id]
+
+ # limit master_amount
+ sale_data = Sale.find_by_sale_id(@sale_id)
+ total = sale_data.grand_total
+ @mastercount = 0
+ others = 0
+ sale_data.sale_payments.each do |sale_payment|
+ if sale_payment.payment_method == "master"
+ @mastercount = @mastercount + sale_payment.payment_amount
+ else
+ others = others + sale_payment.payment_amount
+ end
+ end
+ @can_master = total - @mastercount - others
+ end
+
+ def create
+ cash = params[:amount]
+ sale_id = params[:sale_id]
+ if(Sale.exists?(sale_id))
+ saleObj = Sale.find(sale_id)
+ sale_payment = SalePayment.new
+ @status, @sale = sale_payment.process_payment(saleObj, @user, cash, "master")
+ end
+ end
+
+end
diff --git a/app/controllers/origami/mpu_controller.rb b/app/controllers/origami/mpu_controller.rb
new file mode 100644
index 00000000..3707d1f4
--- /dev/null
+++ b/app/controllers/origami/mpu_controller.rb
@@ -0,0 +1,32 @@
+class Origami::MpuController < BaseOrigamiController
+
+ def index
+ @sale_id = params[:sale_id]
+
+ # limit mpu_amount
+ sale_data = Sale.find_by_sale_id(@sale_id)
+ total = sale_data.grand_total
+ @mpucount = 0
+ others = 0
+ sale_data.sale_payments.each do |sale_payment|
+ if sale_payment.payment_method == "mpu"
+ @mpucount = @mpucount + sale_payment.payment_amount
+ else
+ others = others + sale_payment.payment_amount
+ end
+ end
+ @can_mpu = total - @mpucount - others
+
+ end
+
+ def create
+ cash = params[:amount]
+ sale_id = params[:sale_id]
+ if(Sale.exists?(sale_id))
+ saleObj = Sale.find(sale_id)
+ sale_payment = SalePayment.new
+ @status, @sale = sale_payment.process_payment(saleObj, @user, cash, "mpu")
+ end
+ end
+
+end
diff --git a/app/controllers/origami/others_payments_controller.rb b/app/controllers/origami/others_payments_controller.rb
new file mode 100644
index 00000000..c050c3f3
--- /dev/null
+++ b/app/controllers/origami/others_payments_controller.rb
@@ -0,0 +1,39 @@
+class Origami::OthersPaymentsController < BaseOrigamiController
+
+
+ def index
+ @membership_rebate_balance = 0
+ @sale_id = params[:sale_id]
+ @payment_method_setting = PaymentMethodSetting.all
+
+ # @sale_id = params[:sale_id]
+ # sale_data = Sale.find_by_sale_id(@sale_id)
+
+ # if sale_data.customer_id
+ # customer_data= Customer.find_by_customer_id(sale_data.customer_id)
+ # @membership_id = customer_data.membership_id
+ # if !@membership_id.nil?
+ # membership_setting = MembershipSetting.find_by_membership_type("paypar_url")
+ # membership_data = SalePayment.get_paypar_account(membership_setting.gateway_url,membership_setting.auth_token,@membership_id)
+ # if membership_data["status"]==true
+ # membership_account_data = membership_data["data"];
+ # membership_account_data.each do |acc_data|
+ # if acc_data["accountable_type"] == "REBATEACCOUNT"
+ # @membership_rebate_balance=acc_data["balance"]
+ # else
+ # @membership_rebate_balance = 0
+ # end
+ # end
+ # else
+ # @membership_rebate_balance = 0
+ # end
+ # end
+ # else
+
+ # end
+ end
+
+ def create
+ end
+
+end
diff --git a/app/controllers/origami/payments_controller.rb b/app/controllers/origami/payments_controller.rb
index 447d1282..ca497b81 100644
--- a/app/controllers/origami/payments_controller.rb
+++ b/app/controllers/origami/payments_controller.rb
@@ -1,6 +1,104 @@
class Origami::PaymentsController < BaseOrigamiController
+
+
def index
end
+
def create
+ cash = params[:cash]
+ sale_id = params[:sale_id]
+ if(Sale.exists?(sale_id))
+ saleObj = Sale.find(sale_id)
+ sale_payment = SalePayment.new
+ sale_payment.process_payment(saleObj, @user, cash, "cash")
+
+ unique_code = "ReceiptBillPdf"
+ customer= Customer.find(saleObj.customer_id)
+
+ # get member information
+ member_info = Customer.get_member_account(customer)
+
+ # get printer info
+ print_settings=PrintSetting.find_by_unique_code(unique_code)
+
+ # Calculate Food and Beverage Total
+ food_total, beverage_total = SaleItem.calculate_food_beverage(saleObj.sale_items)
+
+ printer = Printer::ReceiptPrinter.new(print_settings)
+ printer.print_receipt_bill(print_settings,saleObj.sale_items,saleObj,customer.name, food_total, beverage_total, member_info)
+ end
end
+
+ def show
+ sale_id = params[:sale_id]
+ if Sale.exists?(sale_id)
+ @cash = 0.0
+ @other = 0.0
+ @ppamount = 0.0
+ @visacount= 0.0
+ @jcbcount= 0.0
+ @mastercount = 0.0
+ @sale_data = Sale.find_by_sale_id(sale_id)
+
+ #get customer amount
+ @customer = Customer.find(@sale_data.customer_id)
+
+ # get member information
+ response = Customer.get_member_account(@customer)
+
+ @balance = 0.00
+ @accountable_type = ''
+ if response["data"]==true
+ response["data"].each do |res|
+ if res["accountable_type"] == "RebateAccount"
+ @balance = res["balance"]
+ @accountable_type = res["accountable_type"]
+ end
+ end
+ end
+
+ #end customer amount
+
+ @sale_data.sale_payments.each do |spay|
+ if spay.payment_method == "cash"
+ @cash = spay.payment_amount
+ end
+ if spay.payment_method == "mpu"
+ @other += spay.payment_amount
+ elsif spay.payment_method == "paypar"
+ @ppamount += spay.payment_amount
+ elsif spay.payment_method == "visa"
+ @visacount += spay.payment_amount
+ elsif spay.payment_method == "jcb"
+ @jcbcount += spay.payment_amount
+ elsif spay.payment_method == "master"
+ @mastercount += spay.payment_amount
+ end
+ end
+ end
+ end
+
+ def reprint
+
+ sale_id = params[:sale_id]
+
+ saleObj = Sale.find(sale_id)
+
+ unique_code = "ReceiptBillPdf"
+ customer= Customer.find(saleObj.customer_id)
+
+ # get member information
+ member_info = Customer.get_member_account(customer)
+
+ # get printer info
+ print_settings=PrintSetting.find_by_unique_code(unique_code)
+
+ # Calculate Food and Beverage Total
+ food_total, beverage_total = SaleItem.calculate_food_beverage(saleObj.sale_items)
+
+ printer = Printer::ReceiptPrinter.new(print_settings)
+ printer.print_receipt_bill(print_settings,saleObj.sale_items,saleObj,customer.name, food_total, beverage_total, member_info)
+ end
+
+
end
diff --git a/app/controllers/origami/paypar_payments_controller.rb b/app/controllers/origami/paypar_payments_controller.rb
new file mode 100644
index 00000000..0c3ea11f
--- /dev/null
+++ b/app/controllers/origami/paypar_payments_controller.rb
@@ -0,0 +1,21 @@
+class Origami::PayparPaymentsController < BaseOrigamiController
+ def create
+ sale_id = params[:sale_id]
+ redeem_amount = params[:redeem_amount]
+ membership_id = params[:membership_id]
+ payment_method = "paypar"
+ if(Sale.exists?(sale_id))
+ saleObj = Sale.find(sale_id)
+ sale_payment = SalePayment.new
+ status,msg =sale_payment.process_payment(saleObj, @user, redeem_amount,payment_method)
+ if status == true
+ @out = true, "Success!"
+ else
+ @out =false, "Please try again payment!"
+ end
+ else
+ @out = false, "There has no sale record!"
+ end
+
+ end
+end
diff --git a/app/controllers/origami/redeem_payments_controller.rb b/app/controllers/origami/redeem_payments_controller.rb
new file mode 100644
index 00000000..99601449
--- /dev/null
+++ b/app/controllers/origami/redeem_payments_controller.rb
@@ -0,0 +1,67 @@
+class Origami::RedeemPaymentsController < BaseOrigamiController
+ def index
+ @sale_id = params[:sale_id]
+ payment_method = params[:payment_method]
+ @membership_rebate_balance=0
+ sale_data = Sale.find_by_sale_id(@sale_id)
+
+ # limit redeem_amount
+ food_prices, beverage_prices = SaleItem.calculate_food_beverage(sale_data.sale_items)
+ @payparcount = 0
+ others = 0
+ sale_data.sale_payments.each do |sale_payment|
+ if sale_payment.payment_method == "paypar"
+ @payparcount = @payparcount + sale_payment.payment_amount
+ else
+ others = others + sale_payment.payment_amount
+ end
+ end
+ is_bervage_exceed = others - (beverage_prices + sale_data.total_tax)
+ if is_bervage_exceed < 0
+ @food_prices = food_prices - @payparcount
+ else
+ @food_prices = food_prices - @payparcount -is_bervage_exceed
+ end
+
+ if sale_data
+ if sale_data.customer_id
+ customer_data= Customer.find_by_customer_id(sale_data.customer_id)
+ if customer_data
+ @membership_id = customer_data.membership_id
+ if !@membership_id.nil?
+ membership_setting = MembershipSetting.find_by_membership_type("paypar_url")
+ if membership_setting.gateway_url
+ member_actions =MembershipAction.find_by_membership_type("get_account_balance")
+ if member_actions.gateway_url
+ @campaign_type_id = member_actions.additional_parameter["campaign_type_id"]
+ url = membership_setting.gateway_url.to_s + member_actions.gateway_url.to_s
+ merchant_uid= member_actions.merchant_account_id
+ auth_token = member_actions.auth_token.to_s
+ membership_data = SalePayment.get_paypar_account(url,membership_setting.auth_token,@membership_id,@campaign_type_id,merchant_uid,auth_token)
+ if membership_data["status"]==true
+ @membership_rebate_balance=membership_data["balance"]
+ @out = true, @membership_rebate_balance,@membership_id
+ end
+ else
+ @out =false,0
+ end
+ else
+ @out = false,0
+ end
+
+
+ else
+ @out = false, 0
+ end
+ else
+ @out = false, 0
+ end
+ else
+ @out = false, 0
+ end
+ else
+ @out = false, 0
+ end
+ @out = false, 0
+ end
+end
diff --git a/app/controllers/origami/request_bills_controller.rb b/app/controllers/origami/request_bills_controller.rb
index 9f971289..e848366c 100644
--- a/app/controllers/origami/request_bills_controller.rb
+++ b/app/controllers/origami/request_bills_controller.rb
@@ -1,22 +1,37 @@
class Origami::RequestBillsController < BaseOrigamiController
- def show
+ # Print Request Bill and add to sale tables
+ def print
@sale = Sale.new
+ sale_order=SaleOrder.new
- check_order = Order.find_by_id(params[:id])
- if check_order
- @order_details = OrderItem.get_order_items_details(check_order.id)
- @order_details = OrderItem.get_order_items_details(check_order.id)
- @status, @sale_id = @sale.generate_invoice_from_order(check_order.id, nil,current_login_employee.name)
- @sale_data = Sale.find_by_id(@sale_id)
- @sale_items = SaleItem.where("sale_id=?",@sale_id)
- end
- unique_code="ReceiptBillPdf"
+ booking_id = params[:id]
+ check_booking = Booking.find_by_booking_id(booking_id)
+ if check_booking.sale_id.nil?
+ # Create Sale if it doesn't exist
+ puts "current_login_employee"
+ puts current_login_employee.name
+ @status, @sale_id = @sale.generate_invoice_from_booking(check_booking.id,current_login_employee)
+ @sale_data = Sale.find_by_sale_id(@sale_id)
+ @sale_items = SaleItem.where("sale_id=?",@sale_id)
+ else
+ @sale_data = Sale.find_by_sale_id(check_booking.sale_id)
+ @sale_items = SaleItem.where("sale_id=?",@sale_data.sale_id)
+ end
+
+ unique_code = "ReceiptBillPdf"
+ customer= Customer.where('customer_id=' + @sale_data.customer_id)
+
+ # get printer info
print_settings=PrintSetting.find_by_unique_code(unique_code)
+ # find order id by sale id
+ # sale_order = SaleOrder.find_by_sale_id(@sale_data.sale_id)
+
+ # Calculate Food and Beverage Total
+ food_total, beverage_total = SaleItem.calculate_food_beverage(@sale_items)
+
printer = Printer::ReceiptPrinter.new(print_settings)
-
- printer.print_receipt_bill(print_settings,@sale_items,@sale)
-
-
+ printer.print_receipt_bill(print_settings,@sale_items,@sale_data,customer.name, food_total, beverage_total)
+ redirect_to origami_path(@sale_data.sale_id)
end
end
diff --git a/app/controllers/origami/visa_controller.rb b/app/controllers/origami/visa_controller.rb
new file mode 100644
index 00000000..3cb8cabb
--- /dev/null
+++ b/app/controllers/origami/visa_controller.rb
@@ -0,0 +1,31 @@
+class Origami::VisaController < BaseOrigamiController
+
+ def index
+ @sale_id = params[:sale_id]
+
+ # limit visa_amount
+ sale_data = Sale.find_by_sale_id(@sale_id)
+ total = sale_data.grand_total
+ @visacount = 0
+ others = 0
+ sale_data.sale_payments.each do |sale_payment|
+ if sale_payment.payment_method == "visa"
+ @visacount = @visacount + sale_payment.payment_amount
+ else
+ others = others + sale_payment.payment_amount
+ end
+ end
+ @can_visa = total - @visacount - others
+ end
+
+ def create
+ cash = params[:amount]
+ sale_id = params[:sale_id]
+ if(Sale.exists?(sale_id))
+ saleObj = Sale.find(sale_id)
+ sale_payment = SalePayment.new
+ @status, @sale = sale_payment.process_payment(saleObj, @user, cash, "visa")
+ end
+ end
+
+end
diff --git a/app/controllers/reports/daily_sale_controller.rb b/app/controllers/reports/daily_sale_controller.rb
new file mode 100644
index 00000000..b487c269
--- /dev/null
+++ b/app/controllers/reports/daily_sale_controller.rb
@@ -0,0 +1,9 @@
+class Reports::DailySaleController < BaseReportController
+
+ def index
+ from, to = get_date_range_from_params
+ @sale_data = Sale.get_receipt_no_list(from,to)
+ @sale_data = Kaminari.paginate_array(@sale_data).page(params[:page]).per(50)
+ end
+
+end
\ No newline at end of file
diff --git a/app/controllers/reports/receipt_no_controller.rb b/app/controllers/reports/receipt_no_controller.rb
new file mode 100644
index 00000000..8569c051
--- /dev/null
+++ b/app/controllers/reports/receipt_no_controller.rb
@@ -0,0 +1,15 @@
+class Reports::ReceiptNoController < BaseReportController
+ def index
+ from, to = get_date_range_from_params
+ puts "from..."
+ puts from
+ puts "to..."
+ puts to
+ @sale_data = Sale.get_receipt_no_list(from,to)
+ @sale_data = Kaminari.paginate_array(@sale_data).page(params[:page]).per(50)
+ end
+
+ def show
+
+ end
+end
\ No newline at end of file
diff --git a/app/controllers/settings/accounts_controller.rb b/app/controllers/settings/accounts_controller.rb
index 74f27c84..90e6a304 100644
--- a/app/controllers/settings/accounts_controller.rb
+++ b/app/controllers/settings/accounts_controller.rb
@@ -68,6 +68,6 @@ class Settings::AccountsController < ApplicationController
# Never trust parameters from the scary internet, only allow the white list through.
def account_params
- params.require(:account).permit(:title, :account_type)
+ params.require(:account).permit(:title, :account_type,:discount,:point,:bonus,:rebate)
end
end
diff --git a/app/controllers/settings/membership_actions_controller.rb b/app/controllers/settings/membership_actions_controller.rb
new file mode 100644
index 00000000..ad7311f2
--- /dev/null
+++ b/app/controllers/settings/membership_actions_controller.rb
@@ -0,0 +1,74 @@
+class Settings::MembershipActionsController < ApplicationController
+ before_action :set_settings_membership_action, only: [:show, :edit, :update, :destroy]
+
+ # GET /settings/membership_actions
+ # GET /settings/membership_actions.json
+ def index
+ @settings_membership_actions = MembershipAction.all
+ end
+
+ # GET /settings/membership_actions/1
+ # GET /settings/membership_actions/1.json
+ def show
+ end
+
+ # GET /settings/membership_actions/new
+ def new
+ @settings_membership_action = MembershipAction.new
+ end
+
+ # GET /settings/membership_actions/1/edit
+ def edit
+ end
+
+ # POST /settings/membership_actions
+ # POST /settings/membership_actions.json
+ def create
+ @settings_membership_action = MembershipAction.new(settings_membership_action_params)
+
+ respond_to do |format|
+ if @settings_membership_action.save
+ format.html { redirect_to settings_membership_actions_path, notice: 'Membership action was successfully created.' }
+ format.json { render :show, status: :created, location: @settings_membership_action }
+ else
+ format.html { render :new }
+ format.json { render json: @settings_membership_action.errors, status: :unprocessable_entity }
+ end
+ end
+ end
+
+ # PATCH/PUT /settings/membership_actions/1
+ # PATCH/PUT /settings/membership_actions/1.json
+ def update
+ respond_to do |format|
+ if @settings_membership_action.update(settings_membership_action_params)
+ format.html { redirect_to settings_membership_action_path, notice: 'Membership action was successfully updated.' }
+ format.json { render :show, status: :ok, location: @settings_membership_action }
+ else
+ format.html { render :edit }
+ format.json { render json: @settings_membership_action.errors, status: :unprocessable_entity }
+ end
+ end
+ end
+
+ # DELETE /settings/membership_actions/1
+ # DELETE /settings/membership_actions/1.json
+ def destroy
+ @settings_membership_action.destroy
+ respond_to do |format|
+ format.html { redirect_to settings_membership_actions_url, notice: 'Membership action was successfully destroyed.' }
+ format.json { head :no_content }
+ end
+ end
+
+ private
+ # Use callbacks to share common setup or constraints between actions.
+ def set_settings_membership_action
+ @settings_membership_action = MembershipAction.find(params[:id])
+ end
+
+ # Never trust parameters from the scary internet, only allow the white list through.
+ def settings_membership_action_params
+ params.require(:membership_action).permit(:membership_type, :is_active, :gateway_communication_type, :gateway_url, :auth_token, :merchant_account_id, :created_by, :additional_parameter)
+ end
+end
diff --git a/app/controllers/settings/menu_categories_controller.rb b/app/controllers/settings/menu_categories_controller.rb
index d7f373aa..c2a521ae 100644
--- a/app/controllers/settings/menu_categories_controller.rb
+++ b/app/controllers/settings/menu_categories_controller.rb
@@ -63,7 +63,14 @@ class Settings::MenuCategoriesController < ApplicationController
# DELETE /settings/menu_categories/1
# DELETE /settings/menu_categories/1.json
def destroy
+ # instances = MenuItemInstance.where("menu_item_id=?",@settings_menu_item.id)
+ # instances.each do |instance|
+ # instance.destroy
+ # end
+ # @settings_menu_item.destroy
+
# @settings_menu_category.destroy
+ abc = MenuCategory.destroyCategory(@settings_menu_category)
respond_to do |format|
format.html { redirect_to settings_menu_categories_path, notice: 'Menu category was successfully destroyed.' }
format.json { head :no_content }
diff --git a/app/controllers/settings/menu_item_instances_controller.rb b/app/controllers/settings/menu_item_instances_controller.rb
index 6bd00638..2b1fcecf 100644
--- a/app/controllers/settings/menu_item_instances_controller.rb
+++ b/app/controllers/settings/menu_item_instances_controller.rb
@@ -11,18 +11,21 @@ class Settings::MenuItemInstancesController < ApplicationController
# GET /settings/menu_item_instances/1
# GET /settings/menu_item_instances/1.json
def show
- @category = MenuCategory.find(@item.menu_category_id)
+ id = MenuItemInstance.findParentCategory(@item)
+ @category = MenuCategory.find(id)
end
# GET /settings/menu_item_instances/new
def new
- @category = MenuCategory.find(@item.menu_category_id)
+ id = MenuItemInstance.findParentCategory(@item)
+ @category = MenuCategory.find(id)
@settings_menu_item_instances = MenuItemInstance.new
end
# GET /settings/menu_item_instances/1/edit
def edit
- @category = MenuCategory.find(@item.menu_category_id)
+ id = MenuItemInstance.findParentCategory(@item)
+ @category = MenuCategory.find(id)
end
# POST /settings/menu_item_instances
@@ -30,6 +33,7 @@ class Settings::MenuItemInstancesController < ApplicationController
def create
@settings_menu_item_instances = MenuItemInstance.new(settings_menu_item_instance_params)
+ #check if the menu item type is simple or not( not only the diff of status .. here is different routes)
if params[:simple_menu_item_id]
@settings_menu_item_instances.menu_item_id = params[:simple_menu_item_id]
catID = MenuItem.find(params[:simple_menu_item_id])
@@ -38,10 +42,11 @@ class Settings::MenuItemInstancesController < ApplicationController
catID = MenuItem.find(params[:set_menu_item_id])
end
- category = MenuCategory.find(catID.menu_category_id)
+ id = MenuItemInstance.findParentCategory(catID)
+ category = MenuCategory.find(id)
respond_to do |format|
if @settings_menu_item_instances.save
- @settings_menu_item_instances.item_attributes = params[:menu_item_instance][:item_attributes]
+ @settings_menu_item_instances.item_attributes = params[:menu_item_instance][:item_attributes].reject(&:blank?)
@settings_menu_item_instances.save
format.html { redirect_to settings_menu_category_simple_menu_item_path(category,catID), notice: 'Menu item instance was successfully created.' }
format.json { render :show, status: :created, location: @settings_menu_item_instances }
@@ -55,14 +60,15 @@ class Settings::MenuItemInstancesController < ApplicationController
# PATCH/PUT /settings/menu_item_instances/1
# PATCH/PUT /settings/menu_item_instances/1.json
def update
- puts "params[:menu_item_instance][:item_attributes]"
- puts params[:menu_item_instance][:item_attributes]
+ #check if the menu item type is simple or not( not only the diff of status .. here is different routes)
if params[:simple_menu_item_id]
catID = MenuItem.find(params[:simple_menu_item_id])
else
catID = MenuItem.find(params[:set_menu_item_id])
end
- category = MenuCategory.find(catID.menu_category_id)
+
+ id = MenuItemInstance.findParentCategory(catID)
+ category = MenuCategory.find(id)
respond_to do |format|
if @settings_menu_item_instances.update(settings_menu_item_instance_params)
@@ -86,7 +92,13 @@ class Settings::MenuItemInstancesController < ApplicationController
else
catID = MenuItem.find(params[:set_menu_item_id])
end
- category = MenuCategory.find(catID.menu_category_id)
+ # check if the menu item is sub of another menu item
+ if catID.menu_category_id
+ category = MenuCategory.find(catID.menu_category_id)
+ else
+ item = MenuItem.find(catID.menu_item_id)
+ category = MenuCategory.find(item.menu_category_id)
+ end
respond_to do |format|
format.html { redirect_to settings_menu_category_simple_menu_item_path(category,catID), notice: 'Menu item instance was successfully destroyed.' }
format.json { head :no_content }
diff --git a/app/controllers/settings/menus_controller.rb b/app/controllers/settings/menus_controller.rb
index e0ecde30..fa6ac158 100644
--- a/app/controllers/settings/menus_controller.rb
+++ b/app/controllers/settings/menus_controller.rb
@@ -55,7 +55,8 @@ class Settings::MenusController < ApplicationController
# DELETE /settings/menus/1
# DELETE /settings/menus/1.json
def destroy
- @settings_menu.destroy
+ # @settings_menu.destroy
+ abc = Menu.destroyMenu(@settings_menu)
respond_to do |format|
format.html { redirect_to settings_menus_path, notice: 'Menu was successfully destroyed.' }
format.json { head :no_content }
diff --git a/app/controllers/settings/order_queue_stations_controller.rb b/app/controllers/settings/order_queue_stations_controller.rb
index 46fcb54d..6a0a52ae 100644
--- a/app/controllers/settings/order_queue_stations_controller.rb
+++ b/app/controllers/settings/order_queue_stations_controller.rb
@@ -4,7 +4,8 @@ class Settings::OrderQueueStationsController < ApplicationController
# GET /settings/order_queue_stations
# GET /settings/order_queue_stations.json
def index
- @settings_order_queue_stations = OrderQueueStation.all.active
+ @settings_order_queue_stations = OrderQueueStation.all
+ @settings_order_queue_stations = Kaminari.paginate_array(@settings_order_queue_stations).page(params[:page]).per(50)
end
# GET /settings/order_queue_stations/1
@@ -70,6 +71,6 @@ class Settings::OrderQueueStationsController < ApplicationController
# Never trust parameters from the scary internet, only allow the white list through.
def settings_order_queue_station_params
- params.require(:order_queue_station).permit(:station_name, :is_active, :processing_items, :print_copy, :printer_name, :font_size, :cut_per_item, :use_alternate_name, :created_by)
+ params.require(:order_queue_station).permit(:station_name, :is_active, :processing_items, :print_copy, :printer_name, :font_size, :cut_per_item, :use_alternate_name, :created_by,{ zone_ids: [] })
end
end
diff --git a/app/controllers/settings/payment_method_settings_controller.rb b/app/controllers/settings/payment_method_settings_controller.rb
index ce27f725..f3ac595e 100644
--- a/app/controllers/settings/payment_method_settings_controller.rb
+++ b/app/controllers/settings/payment_method_settings_controller.rb
@@ -69,6 +69,6 @@ class Settings::PaymentMethodSettingsController < ApplicationController
# Never trust parameters from the scary internet, only allow the white list through.
def settings_payment_method_setting_params
- params.require(:payment_method_setting).permit(:payment_method, :is_active, :gateway_communication_type, :gateway_url, :auth_token, :merchant_account_id)
+ params.require(:payment_method_setting).permit(:payment_method, :is_active, :gateway_communication_type, :gateway_url, :auth_token, :merchant_account_id, :additional_parameters)
end
end
diff --git a/app/controllers/settings/rooms_controller.rb b/app/controllers/settings/rooms_controller.rb
new file mode 100644
index 00000000..69e3ec22
--- /dev/null
+++ b/app/controllers/settings/rooms_controller.rb
@@ -0,0 +1,81 @@
+class Settings::RoomsController < ApplicationController
+ before_action :set_settings_room, only: [:show, :edit, :update, :destroy]
+ before_action :set_settings_zone, only: [:index, :show, :edit, :new, :update,:create]
+ # GET /settings/rooms
+ # GET /settings/rooms.json
+ def index
+ @settings_rooms = @zone.rooms
+ end
+
+ # GET /settings/rooms/1
+ # GET /settings/rooms/1.json
+ def show
+ @room = Room.find(params[:id])
+ end
+
+ # GET /settings/rooms/new
+ def new
+ @settings_room = Room.new
+ end
+
+ # GET /settings/rooms/1/edit
+ def edit
+ end
+
+ # POST /settings/rooms
+ # POST /settings/rooms.json
+ def create
+ @settings_room = Room.new(settings_room_params)
+ @settings_room.type = DiningFacility::ROOM_TYPE
+ @settings_room.zone_id = params[:zone_id]
+ respond_to do |format|
+ if @settings_room.save
+ format.html { redirect_to settings_zone_rooms_path, notice: 'Room was successfully created.' }
+ format.json { render :show, status: :created, location: @settings_room }
+ else
+ puts "abc"
+ format.html { render :new }
+ format.json { render json: @settings_room.errors, status: :unprocessable_entity }
+ end
+ end
+ end
+
+ # PATCH/PUT /settings/rooms/1
+ # PATCH/PUT /settings/rooms/1.json
+ def update
+ respond_to do |format|
+ if @settings_room.update(settings_room_params)
+ format.html { redirect_to settings_zone_rooms_path, notice: 'Room was successfully updated.' }
+ format.json { render :show, status: :ok, location: @settings_room }
+ else
+ format.html { render :edit }
+ format.json { render json: @settings_room.errors, status: :unprocessable_entity }
+ end
+ end
+ end
+
+ # DELETE /settings/rooms/1
+ # DELETE /settings/rooms/1.json
+ def destroy
+ @settings_room.destroy
+ respond_to do |format|
+ format.html { redirect_to settings_zones_path, notice: 'Room was successfully destroyed.' }
+ format.json { head :no_content }
+ end
+ end
+
+ private
+ # Use callbacks to share common setup or constraints between actions.
+ def set_settings_room
+ @settings_room = Room.find(params[:id])
+ end
+
+ def set_settings_zone
+ @zone = Zone.find(params[:zone_id])
+ end
+
+ # Never trust parameters from the scary internet, only allow the white list through.
+ def settings_room_params
+ params.require(:room).permit(:name, :status, :seater, :order_by,:is_active ,:id, :zone_id, :created_by)
+ end
+end
diff --git a/app/controllers/settings/set_menu_items_controller.rb b/app/controllers/settings/set_menu_items_controller.rb
index f6771548..5946ff49 100644
--- a/app/controllers/settings/set_menu_items_controller.rb
+++ b/app/controllers/settings/set_menu_items_controller.rb
@@ -62,7 +62,7 @@ class Settings::SetMenuItemsController < ApplicationController
# DELETE /settings/menu_items/1
# DELETE /settings/menu_items/1.json
def destroy
- # @settings_menu_item.destroy
+ abc = MenuItem.deleteRecursive(@settings_menu_item)
respond_to do |format|
format.html { redirect_to settings_menu_category_set_menu_items_path, notice: 'Menu item was successfully destroyed.' }
format.json { head :no_content }
@@ -81,6 +81,6 @@ class Settings::SetMenuItemsController < ApplicationController
# Never trust parameters from the scary internet, only allow the white list through.
def settings_menu_item_params
- params.require(:set_menu_item).permit(:item_code, :name, :alt_name, :type, :menu_category_id, :menu_item_id, :min_qty, :min_selectable_item, :max_selectable_item, :created_by)
+ params.require(:set_menu_item).permit(:item_code, :name, :alt_name, :type, :menu_category_id,:account_id , :menu_item_id, :min_qty, :min_selectable_item, :max_selectable_item, :created_by)
end
end
diff --git a/app/controllers/settings/simple_menu_items_controller.rb b/app/controllers/settings/simple_menu_items_controller.rb
index e0d45fcb..05952d0d 100644
--- a/app/controllers/settings/simple_menu_items_controller.rb
+++ b/app/controllers/settings/simple_menu_items_controller.rb
@@ -59,7 +59,7 @@ class Settings::SimpleMenuItemsController < ApplicationController
# DELETE /settings/menu_items/1
# DELETE /settings/menu_items/1.json
def destroy
- # @settings_menu_item.destroy
+ abc = MenuItem.deleteRecursive(@settings_menu_item)
respond_to do |format|
format.html { redirect_to settings_menu_category_simple_menu_items_path, notice: 'Menu item was successfully destroyed.' }
format.json { head :no_content }
@@ -78,6 +78,6 @@ class Settings::SimpleMenuItemsController < ApplicationController
# Never trust parameters from the scary internet, only allow the white list through.
def settings_menu_item_params
- params.require(:simple_menu_item).permit(:item_code, :name, :alt_name, :type, :menu_category_id,:item_attributes, :menu_item_id, :min_qty, :min_selectable_item, :max_selectable_item, :created_by)
+ params.require(:simple_menu_item).permit(:item_code, :name, :alt_name, :type, :menu_category_id,:account_id,:item_attributes, :menu_item_id, :min_qty, :min_selectable_item, :max_selectable_item, :created_by)
end
end
diff --git a/app/controllers/settings/tables_controller.rb b/app/controllers/settings/tables_controller.rb
new file mode 100644
index 00000000..124a0d94
--- /dev/null
+++ b/app/controllers/settings/tables_controller.rb
@@ -0,0 +1,81 @@
+class Settings::TablesController < ApplicationController
+ before_action :set_settings_table, only: [:show, :edit, :update, :destroy]
+ before_action :set_settings_zone, only: [:index, :show, :edit, :new, :update,:create]
+ # GET /settings/tables
+ # GET /settings/tables.json
+ def index
+ @settings_tables = @zone.tables
+ end
+
+ # GET /settings/tables/1
+ # GET /settings/tables/1.json
+ def show
+ @table = Table.find(params[:id])
+ end
+
+ # GET /settings/tables/new
+ def new
+ @settings_table = Table.new
+ end
+
+ # GET /settings/tables/1/edit
+ def edit
+ end
+
+ # POST /settings/tables
+ # POST /settings/tables.json
+ def create
+ @settings_table = Table.new(settings_table_params)
+ @settings_table.type = DiningFacility::TABLE_TYPE
+ @settings_table.zone_id = params[:zone_id]
+ respond_to do |format|
+ if @settings_table.save
+ format.html { redirect_to settings_zone_tables_path, notice: 'Table was successfully created.' }
+ format.json { render :show, status: :created, location: @settings_table }
+ else
+ puts "abc"
+ format.html { render :new }
+ format.json { render json: @settings_table.errors, status: :unprocessable_entity }
+ end
+ end
+ end
+
+ # PATCH/PUT /settings/tables/1
+ # PATCH/PUT /settings/tables/1.json
+ def update
+ respond_to do |format|
+ if @settings_table.update(settings_table_params)
+ format.html { redirect_to settings_zone_tables_path, notice: 'Table was successfully updated.' }
+ format.json { render :show, status: :ok, location: @settings_table }
+ else
+ format.html { render :edit }
+ format.json { render json: @settings_table.errors, status: :unprocessable_entity }
+ end
+ end
+ end
+
+ # DELETE /settings/tables/1
+ # DELETE /settings/tables/1.json
+ def destroy
+ @settings_table.destroy
+ respond_to do |format|
+ format.html { redirect_to settings_zones_path, notice: 'Table was successfully destroyed.' }
+ format.json { head :no_content }
+ end
+ end
+
+ private
+ # Use callbacks to share common setup or constraints between actions.
+ def set_settings_table
+ @settings_table = Table.find(params[:id])
+ end
+
+ def set_settings_zone
+ @zone = Zone.find(params[:zone_id])
+ end
+
+ # Never trust parameters from the scary internet, only allow the white list through.
+ def settings_table_params
+ params.require(:table).permit(:name, :status, :seater, :order_by,:is_active ,:id, :zone_id, :created_by)
+ end
+end
diff --git a/app/controllers/settings/zones_controller.rb b/app/controllers/settings/zones_controller.rb
index 779c03fe..5752b5e3 100644
--- a/app/controllers/settings/zones_controller.rb
+++ b/app/controllers/settings/zones_controller.rb
@@ -10,6 +10,8 @@ class Settings::ZonesController < ApplicationController
# GET /settings/zones/1
# GET /settings/zones/1.json
def show
+ @settings_tables = @settings_zone.tables
+ @settings_rooms = @settings_zone.rooms
end
# GET /settings/zones/new
@@ -28,7 +30,7 @@ class Settings::ZonesController < ApplicationController
respond_to do |format|
if @settings_zone.save
- format.html { redirect_to @settings_zone, notice: 'Zone was successfully created.' }
+ format.html { redirect_to settings_zone_path(@settings_zone), notice: 'Zone was successfully created.' }
format.json { render :show, status: :created, location: @settings_zone }
else
format.html { render :new }
@@ -42,7 +44,7 @@ class Settings::ZonesController < ApplicationController
def update
respond_to do |format|
if @settings_zone.update(settings_zone_params)
- format.html { redirect_to @settings_zone, notice: 'Zone was successfully updated.' }
+ format.html { redirect_to settings_zone_path(@settings_zone), notice: 'Zone was successfully updated.' }
format.json { render :show, status: :ok, location: @settings_zone }
else
format.html { render :edit }
@@ -56,7 +58,7 @@ class Settings::ZonesController < ApplicationController
def destroy
@settings_zone.destroy
respond_to do |format|
- format.html { redirect_to settings_zones_url, notice: 'Zone was successfully destroyed.' }
+ format.html { redirect_to settings_zones_path, notice: 'Zone was successfully destroyed.' }
format.json { head :no_content }
end
end
@@ -69,6 +71,6 @@ class Settings::ZonesController < ApplicationController
# Never trust parameters from the scary internet, only allow the white list through.
def settings_zone_params
- params.require(:settings_zone).permit(:name, :is_active, :created_by)
+ params.require(:zone).permit(:name, :is_active, :created_by)
end
end
diff --git a/app/controllers/transactions/manual_sales_controller.rb b/app/controllers/transactions/manual_sales_controller.rb
new file mode 100644
index 00000000..77dd4371
--- /dev/null
+++ b/app/controllers/transactions/manual_sales_controller.rb
@@ -0,0 +1,77 @@
+class Transactions::ManualSalesController < ApplicationController
+
+ def void
+ @sale = params[:sale_id]
+ @reason = Lookup.where("lookup_type = 'void_reason'")
+ respond_to do |format|
+ format.html # index.html.erb
+ format.json { render json: @sales }
+ end
+ end
+
+ def manual_void_sale
+ sale_id = params[:sale_id]
+ reason = params[:reason]
+ sale = Sale.find(sale_id)
+ sale.sale_status = 'void'
+ sale.requested_by = current_login_employee.id
+ if sale.save
+ @sale = SaleAudit.record_audit_void(sale_id, current_login_employee.id, current_login_employee.id, reason)
+
+ if sale.sale_orders
+
+ sale.sale_orders.each do |bo|
+ order =Order.find(bo.order_id)
+ order.status= 'void'
+ order.save
+ booking_order = BookingOrder.find_by_order_id(bo.order_id)
+
+ if booking_order.booking_id
+ booking = Booking.find(booking_order.booking_id)
+ dining_facility = booking.dining_facility
+ dining_facility.status = 'available'
+ dining_facility.save
+ end
+ end
+
+ end
+ end
+ respond_to do |format|
+ format.html { redirect_to transactions_sales_url, notice: 'Sale was successfully void.' }
+ end
+
+ end
+
+ def manual_complete_sale
+ sale_id = params[:sale_id]
+ sale = Sale.find(sale_id)
+
+ sale.sale_status = 'completed'
+ sale.requested_by = current_login_employee.id
+ remark = "Complete for Sale ID #{sale_id} By #{current_login_employee.name}"
+ if sale.save
+ @sale = SaleAudit.record_audit_complete(sale_id, remark, current_login_employee.id)
+
+ if sale.sale_orders
+
+ sale.sale_orders.each do |bo|
+ # order =Order.find(bo.order_id)
+ # order.status= 'void'
+ # order.save
+ booking_order = BookingOrder.find_by_order_id(bo.order_id)
+
+ if booking_order.booking_id
+ booking = Booking.find(booking_order.booking_id)
+ dining_facility = booking.dining_facility
+ dining_facility.status = 'available'
+ dining_facility.save
+ end
+ end
+
+ end
+
+ end
+ redirect_to transactions_sales_path
+ end
+
+end
diff --git a/app/controllers/transactions/orders_controller.rb b/app/controllers/transactions/orders_controller.rb
new file mode 100644
index 00000000..35cefe6f
--- /dev/null
+++ b/app/controllers/transactions/orders_controller.rb
@@ -0,0 +1,32 @@
+class Transactions::OrdersController < ApplicationController
+ def index
+
+ filter = params[:filter]
+ if filter.nil?
+ orders = Order.order("order_id desc")
+ else
+ order = Order.search(filter)
+ if order.count > 0
+ orders = order
+ else
+ orders = Order.order("order_id desc")
+
+ end
+ end
+ @orders = Kaminari.paginate_array(orders).page(params[:page]).per(50)
+ respond_to do |format|
+ format.html # index.html.erb
+ format.json { render json: @orders }
+ end
+ end
+ def show
+
+ @order = Order.find(params[:id])
+
+ respond_to do |format|
+ format.html # show.html.erb
+ format.json { render json: @order }
+ end
+ end
+
+end
diff --git a/app/controllers/transactions/sales_controller.rb b/app/controllers/transactions/sales_controller.rb
index ea9e8ccd..fed62a34 100644
--- a/app/controllers/transactions/sales_controller.rb
+++ b/app/controllers/transactions/sales_controller.rb
@@ -4,12 +4,68 @@ class Transactions::SalesController < ApplicationController
# GET /transactions/sales
# GET /transactions/sales.json
def index
- @transactions_sales = Sale.all
+
+ search_date = params[:date]
+ receipt_no = params[:receipt_no]
+ today = Date.today
+
+ if receipt_no.nil? && search_date.nil?
+ @sales = Sale.where("NOT sale_status = 'void' " ).order("sale_id desc").limit(500)
+ @sales = Kaminari.paginate_array(@sales).page(params[:page]).per(50)
+ else
+ if !search_date.blank? && receipt_no.blank?
+ sale = Sale.where("DATE_FORMAT(receipt_date,'%d-%m-%Y') = ? and NOT sale_status = 'void' ", search_date).order("sale_id desc").limit(500).page(params[:page])
+ elsif !search_date.blank? && !receipt_no.blank?
+ sale = Sale.where("receipt_no LIKE ? or DATE_FORMAT(receipt_date,'%d-%m-%Y') = ? and NOT sale_status = 'void' ", "%#{receipt_no}%", search_date).order("sale_id desc").limit(500).page(params[:page])
+ else
+ sale = Sale.where("receipt_no LIKE ? and NOT sale_status = 'void' ", receipt_no).order("sale_id desc").limit(500).page(params[:page])
+ end
+ if sale.count > 0
+ @sales = sale
+ @sales = Kaminari.paginate_array(@sales).page(params[:page]).per(50)
+ else
+ @sales = 0
+ end
+ end
+
+ respond_to do |format|
+ format.html # index.html.erb
+ format.json { render json: @sales }
+ end
+
end
# GET /transactions/sales/1
# GET /transactions/sales/1.json
def show
+
+ @sale = Sale.find(params[:id])
+
+ @order_items = []
+ @sale.sale_orders.each do |sale_order|
+ order = Order.find(sale_order.order_id)
+ #if (order.status == "new")
+ @order_items = @order_items + order.order_items
+ #end
+ end
+
+ @sale_receivables = SalePayment.where('sale_id = ?', @sale.id)
+
+ #get customer amount
+ @customer = Customer.find(@sale.customer_id)
+ response = Customer.get_member_account(@customer)
+
+ if(response["status"] == true)
+ @membership = response["data"]
+ else
+ @membership = 0
+ end
+ #end customer amount
+
+ respond_to do |format|
+ format.html # show.html.erb
+ format.json { render json: @sale }
+ end
end
# GET /transactions/sales/new
diff --git a/app/models/login_form.rb b/app/forms/login_form.rb
similarity index 100%
rename from app/models/login_form.rb
rename to app/forms/login_form.rb
diff --git a/app/forms/shop_form.rb b/app/forms/shop_form.rb
index 19af84a5..179e73fd 100644
--- a/app/forms/shop_form.rb
+++ b/app/forms/shop_form.rb
@@ -1,7 +1,7 @@
#Form object to use during the installation process - will handle creation of shop model into db after verification from the cloud
#provising service through license verification
-class ShopForm < ActiveModel
- :attr_accessor :logo, :name, :address, :township, :city, :state, :country, :license, :base_currency, :password, :password_confirmation
-
-end
+# class ShopForm < ActiveModel
+# # attr_accessor :logo, :name, :address, :township, :city, :state, :country, :license, :base_currency, :password, :password_confirmation
+#
+# end
diff --git a/app/helpers/api/origami/paypar_helper.rb b/app/helpers/api/origami/paypar_helper.rb
new file mode 100644
index 00000000..0e102f10
--- /dev/null
+++ b/app/helpers/api/origami/paypar_helper.rb
@@ -0,0 +1,2 @@
+module Api::Origami::PayparHelper
+end
diff --git a/app/helpers/crm/dining_queues_helper.rb b/app/helpers/crm/dining_queues_helper.rb
new file mode 100644
index 00000000..af60bd52
--- /dev/null
+++ b/app/helpers/crm/dining_queues_helper.rb
@@ -0,0 +1,2 @@
+module Crm::DiningQueuesHelper
+end
diff --git a/app/helpers/origami/paypar_helper.rb b/app/helpers/origami/paypar_helper.rb
new file mode 100644
index 00000000..fe18e897
--- /dev/null
+++ b/app/helpers/origami/paypar_helper.rb
@@ -0,0 +1,2 @@
+module Origami::PayparHelper
+end
diff --git a/app/helpers/origami/redeem_payments_helper.rb b/app/helpers/origami/redeem_payments_helper.rb
new file mode 100644
index 00000000..7e9151cb
--- /dev/null
+++ b/app/helpers/origami/redeem_payments_helper.rb
@@ -0,0 +1,2 @@
+module Origami::RedeemPaymentsHelper
+end
diff --git a/app/helpers/settings/membership_actions_helper.rb b/app/helpers/settings/membership_actions_helper.rb
new file mode 100644
index 00000000..038ec51f
--- /dev/null
+++ b/app/helpers/settings/membership_actions_helper.rb
@@ -0,0 +1,2 @@
+module Settings::MembershipActionsHelper
+end
diff --git a/app/helpers/settings/orders_helper.rb b/app/helpers/settings/orders_helper.rb
new file mode 100644
index 00000000..f5825365
--- /dev/null
+++ b/app/helpers/settings/orders_helper.rb
@@ -0,0 +1,2 @@
+module Settings::OrdersHelper
+end
diff --git a/app/jobs/order_queue_processor_job.rb b/app/jobs/order_queue_processor_job.rb
index e9a8c13f..e92faa36 100644
--- a/app/jobs/order_queue_processor_job.rb
+++ b/app/jobs/order_queue_processor_job.rb
@@ -5,7 +5,7 @@ class OrderQueueProcessorJob < ApplicationJob
# Do something later
#Order ID
order = Order.find(order_id)
-
+
#Loop through the order stations and process the items
#Execute orders and send to order stations
if order
diff --git a/app/models/account.rb b/app/models/account.rb
index e1cdc6d3..5d775b83 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -2,6 +2,8 @@ class Account < ApplicationRecord
validates_presence_of :title, :account_type
has_many :menu_items
- # belongs_to :lookup , :class_name => "Lookup"
-
+
+ def self.collection
+ Account.select("id, title").map { |e| [e.title, e.id] }
+ end
end
diff --git a/app/models/assigned_order_item.rb b/app/models/assigned_order_item.rb
index c2d2e8b0..3ac84077 100644
--- a/app/models/assigned_order_item.rb
+++ b/app/models/assigned_order_item.rb
@@ -1,4 +1,9 @@
class AssignedOrderItem < ApplicationRecord
+ before_create :generate_custom_id
+
+ #primary key - need to be unique
+ self.primary_key = "assigned_order_item_id"
+
belongs_to :order
belongs_to :order_queue_station
@@ -11,4 +16,9 @@ class AssignedOrderItem < ApplicationRecord
assigned_order_item.delivery_status = false
assigned_order_item.save
end
+
+ private
+ def generate_custom_id
+ self.assigned_order_item_id = SeedGenerator.generate_id(self.class.name, "AOI")
+ end
end
diff --git a/app/models/booking.rb b/app/models/booking.rb
index c34ecf42..01cf0f46 100644
--- a/app/models/booking.rb
+++ b/app/models/booking.rb
@@ -1,9 +1,17 @@
+
class Booking < ApplicationRecord
+ self.primary_key = "booking_id"
+
#primary key - need to be unique
-
+ before_create :generate_custom_id
+
belongs_to :dining_facility, :optional => true
belongs_to :sale, :optional => true
has_many :booking_orders
+ has_many :orders, :through => :booking_orders
-
+ private
+ def generate_custom_id
+ self.booking_id = SeedGenerator.generate_id(self.class.name, "BKI")
+ end
end
diff --git a/app/models/booking_order.rb b/app/models/booking_order.rb
index c9f748f0..ddf5ed18 100644
--- a/app/models/booking_order.rb
+++ b/app/models/booking_order.rb
@@ -1,5 +1,5 @@
class BookingOrder < ApplicationRecord
- #primary key - need to be unique
+ #primary key - need to be unique
belongs_to :booking
belongs_to :order
diff --git a/app/models/cashier_login_log.rb b/app/models/cashier_login_log.rb
index d64860ce..353e9c90 100644
--- a/app/models/cashier_login_log.rb
+++ b/app/models/cashier_login_log.rb
@@ -1,4 +1,11 @@
class CashierLoginLog < ApplicationRecord
+ before_create :generate_custom_id
+
belongs_to :cashier_station
belongs_to :employee
+
+ private
+ def generate_custom_id
+ self.cashier_login_log_id = SeedGenerator.generate_id(self.class.name, "CLO")
+ end
end
diff --git a/app/models/customer.rb b/app/models/customer.rb
index 42247791..0cbf8d58 100644
--- a/app/models/customer.rb
+++ b/app/models/customer.rb
@@ -1,11 +1,74 @@
class Customer < ApplicationRecord
+
+ #self.primary_key = :customer_id
+
+ before_create :generate_custom_id
has_many :orders
has_many :sales
- validates_presence_of :name, :contact_no
+ validates_presence_of :name, :contact_no, :email
validates :contact_no, uniqueness: true
+ validates :email, uniqueness: true
+
+ paginates_per 50
+
+ # def self.get_member_group
+
+ # membership = MembershipSetting.find_by_membership_type("paypar_url")
+ # memberaction = MembershipAction.find_by_membership_type("get_all_member_group")
+ # app_token = membership.auth_token.to_s
+
+ # url = membership.gateway_url.to_s + memberaction.gateway_url.to_s
+ # response = HTTParty.get(url,
+ # :body => { app_token: app_token}.to_json,
+ # :headers => {
+ # 'Content-Type' => 'application/json',
+ # 'Accept' => 'application/json'
+ # }
+ # )
+ # puts response.body, response.code, response.message, response.headers.inspect
+
+ # return response;
+
+ # end
+
+ def self.get_member_account(customer)
+ membership = MembershipSetting.find_by_membership_type("paypar_url")
+ memberaction = MembershipAction.find_by_membership_type("get_all_member_account")
+ merchant_uid = memberaction.merchant_account_id.to_s
+ auth_token = memberaction.auth_token.to_s
+ url = membership.gateway_url.to_s + memberaction.gateway_url.to_s
+
+ response = HTTParty.get(url, :body => { membership_id: customer.membership_id,merchant_uid:merchant_uid,auth_token:auth_token}.to_json,
+ :headers => {
+ 'Content-Type' => 'application/json',
+ 'Accept' => 'application/json'
+ }
+ )
+
+ return response;
+
+ end
+
+ def self.search(search)
+ if search
+ # find(:all, :conditions => ['name LIKE ? OR contact_no LIKE ?', "%#{search}%", "%#{search}%"])
+ where("name LIKE ? OR contact_no LIKE ?", "%#{search}%", "%#{search}%",)
+ else
+ find(:all)
+ end
+ end
+
+ # def self.search(search)
+ # where("name LIKE ? OR contact_no LIKE ?", "%#{search}%", "%#{search}%",)
+ # end
def lastest_invoices
sales.where(:customer_id => self.id).order("created_at desc").limit(5)
end
+
+ private
+ def generate_custom_id
+ self.customer_id = SeedGenerator.generate_id(self.class.name, "CUS")
+ end
end
diff --git a/app/models/dining_facility.rb b/app/models/dining_facility.rb
index 9a4f7a75..a3f8948f 100644
--- a/app/models/dining_facility.rb
+++ b/app/models/dining_facility.rb
@@ -9,10 +9,11 @@ class DiningFacility < ApplicationRecord
scope :active, -> {where(is_active: true)}
def get_current_booking
- booking = Booking.where("dining_facility_id = #{self.id} and booking_status ='occupied' and checkin_at between '#{DateTime.now.utc - 5.hours}' and '#{DateTime.now.utc}' and checkout_at is null").limit(1)
+ puts "enter booking"
+ booking = Booking.where("dining_facility_id = #{self.id} and booking_status ='assign' and checkin_at between '#{DateTime.now.utc - 5.hours}' and '#{DateTime.now.utc}' and checkout_at is null").limit(1)
if booking.count > 0 then
- return booking[0]
+ return booking[0].booking_id
else
return nil
end
diff --git a/app/models/dining_queue.rb b/app/models/dining_queue.rb
new file mode 100644
index 00000000..09f8b6b5
--- /dev/null
+++ b/app/models/dining_queue.rb
@@ -0,0 +1,7 @@
+class DiningQueue < ApplicationRecord
+
+ def self.generate_queue_no
+ queue_no = DiningQueue.all.count + 1
+ return queue_no
+ end
+end
diff --git a/app/models/employee.rb b/app/models/employee.rb
index 1f3cace0..98b8380b 100644
--- a/app/models/employee.rb
+++ b/app/models/employee.rb
@@ -6,6 +6,9 @@ class Employee < ApplicationRecord
validates :emp_id, uniqueness: true, numericality: true, length: {in: 1..4}, allow_blank: true
validates :password, numericality: true, length: {in: 3..9}, allow_blank: true
+ def self.collection
+ Employee.select("id, name").map { |e| [e.name, e.id] }
+ end
def self.login(emp_id, password)
user = Employee.find_by_emp_id(emp_id)
diff --git a/app/models/lookup.rb b/app/models/lookup.rb
index e1b141df..5434cedd 100644
--- a/app/models/lookup.rb
+++ b/app/models/lookup.rb
@@ -17,6 +17,10 @@ class Lookup < ApplicationRecord
"Gateway Communication Type" => "gateway_communication_type"}
end
+ # def self.get_by_type( lookup_type)
+ # Lookup.select("value, name").where("lookup_type = ?", lookup_type ).order("name asc").map { |r| [r.name, r.value] }
+ # end
+
def self.collection_of(type)
Lookup.select("name, value").where("lookup_type" => type ).map { |l| [l.name, l.value] }
diff --git a/app/models/membership_action.rb b/app/models/membership_action.rb
new file mode 100644
index 00000000..93a4b3d8
--- /dev/null
+++ b/app/models/membership_action.rb
@@ -0,0 +1,2 @@
+class MembershipAction < ApplicationRecord
+end
diff --git a/app/models/menu.rb b/app/models/menu.rb
index 0c956a1e..05adfac4 100644
--- a/app/models/menu.rb
+++ b/app/models/menu.rb
@@ -22,4 +22,13 @@ class Menu < ApplicationRecord
return current_menu
end
+
+ def self.destroyMenu(menu)
+ cats = MenuCategory.where("menu_id=?",menu.id)
+ cats.each do |cat|
+ abc = MenuCategory.destroyCategory(cat)
+ end
+ menu.destroy
+ return false
+ end
end
diff --git a/app/models/menu_category.rb b/app/models/menu_category.rb
index 474990f2..e660b4b5 100644
--- a/app/models/menu_category.rb
+++ b/app/models/menu_category.rb
@@ -8,5 +8,29 @@ class MenuCategory < ApplicationRecord
default_scope { order('order_by asc') }
+ def self.destroyCategory(menu_category)
+ # find the sub menu item of current item
+ sub_menu_cat = MenuCategory.where("menu_category_id=?",menu_category.id)
+ if sub_menu_cat.length != 0
+ sub_menu_cat.each do |sub|
+ if destroyCategory(sub)
+ end
+ end
+ # find the items of current menu item
+ items = MenuItem.where("menu_category_id=?",menu_category.id)
+ items.each do |item|
+ abc = MenuItem.deleteRecursive(item)
+ end
+ menu_category.destroy
+ return true
+ else
+ items = MenuItem.where("menu_category_id=?",menu_category.id)
+ items.each do |item|
+ abc = MenuItem.deleteRecursive(item)
+ end
+ menu_category.destroy
+ return false
+ end
+ end
end
diff --git a/app/models/menu_item.rb b/app/models/menu_item.rb
index 2a4e86be..89967e2e 100644
--- a/app/models/menu_item.rb
+++ b/app/models/menu_item.rb
@@ -1,9 +1,10 @@
class MenuItem < ApplicationRecord
- belongs_to :account
+
belongs_to :menu_category, :optional => true
has_many :menu_item_instances
belongs_to :parent, :class_name => "MenuItem", foreign_key: "menu_item_id", :optional => true
has_many :children, :class_name => "MenuItem", foreign_key: "menu_item_id"
+ belongs_to :account
validates_presence_of :item_code, :name, :type, :min_qty, :taxable, :min_selectable_item, :max_selectable_item
@@ -38,4 +39,31 @@ class MenuItem < ApplicationRecord
return nil
end
+
+ def self.deleteRecursive(menu_item)
+
+ # find the sub menu item of current item
+ sub_menu_items = MenuItem.where("menu_item_id=?",menu_item.id)
+ if sub_menu_items.length != 0
+ sub_menu_items.each do |subitem|
+ if deleteRecursive(subitem)
+ end
+ end
+ # find the instances of current menu item
+ instances = MenuItemInstance.where("menu_item_id=?",menu_item.id)
+ instances.each do |instance|
+ instance.destroy
+ end
+ menu_item.destroy
+ return true
+ else
+ instances = MenuItemInstance.where("menu_item_id=?",menu_item.id)
+ instances.each do |instance|
+ instance.destroy
+ end
+ menu_item.destroy
+ return false
+ end
+
+ end
end
diff --git a/app/models/menu_item_instance.rb b/app/models/menu_item_instance.rb
index e7f7775e..09225a23 100644
--- a/app/models/menu_item_instance.rb
+++ b/app/models/menu_item_instance.rb
@@ -1,4 +1,12 @@
class MenuItemInstance < ApplicationRecord
belongs_to :menu_item
+ def self.findParentCategory(item)
+ if item.menu_category_id
+ return item.menu_category_id
+ else
+ parentitem = MenuItem.find(item.menu_item_id)
+ findParentCategory(parentitem)
+ end
+ end
end
diff --git a/app/models/order.rb b/app/models/order.rb
index f571faa9..f3ae798c 100644
--- a/app/models/order.rb
+++ b/app/models/order.rb
@@ -1,6 +1,8 @@
class Order < ApplicationRecord
- #primary key - need to be unique
+ self.primary_key = "order_id"
+ #primary key - need to be unique
+ before_create :generate_custom_id
before_create :set_order_date
belongs_to :customer
@@ -23,14 +25,15 @@ class Order < ApplicationRecord
booking = nil
if self.new_booking
+
booking = Booking.create({:dining_facility_id => self.table_id,:type => "TableBooking",
:checkin_at => Time.now.utc, :checkin_by => self.employee_name,
:booking_status => "assign" })
+ table = DiningFacility.find(self.table_id)
+ table.status = "occupied"
+ table.save
else
- if (self.booking_id.to_i > 0 )
- booking = Booking.find(self.booking_id)
- end
-
+ booking = Booking.find(self.booking_id)
end
booking.save!
@@ -40,13 +43,13 @@ class Order < ApplicationRecord
self.adding_line_items
#Add Order Table and Room relation afrer order creation
- BookingOrder.create({:booking_id => booking.id, :order => self})
+ BookingOrder.create({:booking_id => booking.booking_id, :order => self})
#Send order to queue one it done!
process_order_queue
#send order to broadcast job
- send_order_broadcast
+ #send_order_broadcast
return true, booking
@@ -182,14 +185,6 @@ class Order < ApplicationRecord
return new_items_list
end
- private
- def validate_api_inputs
-
- end
-
- def set_order_date
- self.date = Time.now.utc
- end
#Update Items Count and Quantity changes whenever there is changes
def update_products_and_quantity_count
@@ -198,7 +193,7 @@ class Order < ApplicationRecord
# Count number of different items
self.item_count = self.order_items.item_count
self.quantity_count = quantity_count
- # Counter number of quantity
+ # Counter number of quantityf
end
#Process order items and send to order queue
@@ -214,42 +209,125 @@ class Order < ApplicationRecord
OrderBroadcastJob.perform_later(self.id)
end
- #Origami: Cashier : to view order type Table
+ #Origami: Cashier : to view order Table
def self.get_order_table
- order_table = Order.select("orders.id as order_id,sum(order_items.qty*order_items.price) as total_price,
- order_items.id as order_items_id,dining_facilities.name as table_name")
- .joins("left join booking_orders on booking_orders.order_id = orders.id
- left join bookings on bookings.id = booking_orders.id
+ order_table = Order.select("orders.order_id as order_id,sum(order_items.qty*order_items.price) as total_price,
+ order_items.order_items_id as order_items_id,dining_facilities.name as table_name")
+ .joins("left join booking_orders on booking_orders.order_id = orders.order_id
+ left join bookings on bookings.booking_id = booking_orders.booking_order_id
left join dining_facilities on dining_facilities.id = bookings.dining_facility_id
- left join order_items on order_items.order_id = orders.id")
+ left join order_items on order_items.order_id = orders.order_id")
.where("dining_facilities.type=? and orders.order_type=? and dining_facilities.is_active=?",DiningFacility::TABLE_TYPE,"dine_in",true)
-
- .group("orders.id")
-
+ .group("orders.order_id, order_items.order_items_id,dining_facilities.name")
end
+
+ #Origami: Cashier : to view booking order Table
+ def self.get_booking_order_table
+ booking_orders = Booking.select("sales.receipt_no,orders.status as order_status, sales.sale_status as sale_status,
+ orders.order_id as order_id,sales.customer_id as sale_customer_id,orders.customer_id as order_customer_id,
+ bookings.booking_id,sales.sale_id as sale_id,dining_facilities.name as table_name")
+ .joins("left join booking_orders on booking_orders.booking_id = bookings.booking_id")
+ .joins("left join dining_facilities on dining_facilities.id = bookings.dining_facility_id")
+ .joins("left join orders on orders.order_id = booking_orders.order_id")
+ .joins("left join sales on sales.sale_id = bookings.sale_id")
+ .where("(orders.status = 'new' or orders.status = 'billed') and (dining_facilities.type=? and dining_facilities.is_active=?)",DiningFacility::TABLE_TYPE,true)
+ .group("bookings.booking_id")
+ # For PG
+ # booking_orders.order_id IS NOT NULL and dining_facilities.type=? and dining_facilities.is_active=?",DiningFacility::TABLE_TYPE,true
+ # sales.receipt_no,orders.status,sales.sale_id,dining_facilities.name,orders.status,orders.order_id
+ end
+
+ #Origami: Cashier : to view booking order Table
+ def self.get_completed_order
+ completed_orders = Booking.select("sales.receipt_no, sales.sale_status, orders.status as order_status,orders.order_id,
+ bookings.booking_id,sales.sale_id as sale_id,dining_facilities.name as table_name,sales.customer_id as sale_customer_id,orders.customer_id as order_customer_id")
+ .joins("left join booking_orders on booking_orders.booking_id = bookings.booking_id")
+ .joins("left join dining_facilities on dining_facilities.id = bookings.dining_facility_id")
+ .joins("left join orders on orders.order_id = booking_orders.order_id")
+ .joins("left join sales on sales.sale_id = bookings.sale_id")
+ .where("sales.sale_status='completed'")
+ .group("sales.sale_id,bookings.booking_id,sales.receipt_no,orders.status,sales.sale_id,dining_facilities.name,orders.status,orders.order_id")
+ # For PG
+ #bookings.booking_id,sales.receipt_no,orders.status,sales.sale_id,dining_facilities.name,orders.status,orders.order_id
+ end
+
+ #Origami: Cashier : to view order type Room
+ def self.get_booking_order_rooms
+ booking_rooms = Booking.select("sales.receipt_no,orders.status as order_status, sales.sale_status as sale_status,
+ orders.order_id as order_id,sales.customer_id as sale_customer_id,orders.customer_id as order_customer_id,
+ bookings.booking_id,orders.customer_id as customer_id,
+ sales.sale_id as sale_id,dining_facilities.name as room_name")
+ .joins("left join booking_orders on booking_orders.booking_id = bookings.booking_id")
+ .joins("left join dining_facilities on dining_facilities.id = bookings.dining_facility_id")
+ .joins("left join orders on orders.order_id = booking_orders.order_id")
+ .joins("left join sales on sales.sale_id = bookings.sale_id")
+ .where("(orders.status = 'new' or orders.status = 'billed') and (dining_facilities.type=? and dining_facilities.is_active=?)",DiningFacility::ROOM_TYPE,true)
+ .group("bookings.booking_id")
+ # For PG
+ # booking_orders.order_id IS NOT NULL and dining_facilities.type=? and dining_facilities.is_active=?",DiningFacility::ROOM_TYPE,true
+ # sales.receipt_no,orders.status,sales.sale_id,dining_facilities.name,orders.customer_id,orders.order_id
+ end
+
#Origami: Cashier : to view order type Room
def self.get_order_rooms
- order_rooms = Order.select("orders.id as order_id,sum(order_items.qty*order_items.price) as total_price,
- order_items.id as order_items_id,dining_facilities.name as room_name")
- .joins("left join booking_orders on booking_orders.order_id = orders.id
- left join bookings on bookings.id = booking_orders.id
+ order_rooms = Order.select("orders.order_id as order_id,sum(order_items.qty*order_items.price) as total_price,
+ order_items.id as order_items_id,dining_facilities.name as room_name")
+ .joins("left join booking_orders on booking_orders.order_id = orders.order_id
+ left join bookings on bookings.booking_id = booking_orders.order_id
left join dining_facilities on dining_facilities.id = bookings.dining_facility_id
- left join order_items on order_items.order_id = orders.id")
+ left join order_items on order_items.order_id = orders.order_id")
.where("dining_facilities.type=? and orders.order_type=? and dining_facilities.is_active=?",DiningFacility::ROOM_TYPE,"dine_in",true)
- .group("orders.id,order_items.id,dining_facilities.name")
+ .group("orders.order_id")
end
+
#Origami: Cashier : to view orders
def self.get_orders
from = Time.now.beginning_of_day.utc
to = Time.now.end_of_day.utc
- orders = Order.select("orders.id as order_id,sum(order_items.qty*order_items.price) as total_price,
- order_items.id as order_items_id,dining_facilities.name as table_or_room_name")
- .joins("left join booking_orders on booking_orders.order_id = orders.id
- left join bookings on bookings.id = booking_orders.id
- left join dining_facilities on dining_facilities.id = bookings.dining_facility_id
- left join order_items on order_items.order_id = orders.id")
+ orders=Booking.select("sales.receipt_no, sales.sale_status as sale_status, orders.status as order_status,
+ orders.order_id as order_id,sales.customer_id as sale_customer_id,orders.customer_id as order_customer_id,
+ bookings.booking_id,orders.customer_id as customer_id,
+ sales.sale_id as sale_id,dining_facilities.name as table_name")
+ .joins("left join booking_orders on booking_orders.booking_id = bookings.booking_id")
+ .joins("left join dining_facilities on dining_facilities.id = bookings.dining_facility_id")
+ .joins("left join orders on orders.order_id = booking_orders.order_id")
+ .joins("left join sales on sales.sale_id = bookings.sale_id")
+ .where("(orders.status = 'new' or orders.status = 'billed')")
+
+ # orders = Order.select("orders.order_id as order_id,sales.receipt_no,orders.status as order_status, sales.sale_status as sale_status,
+ # orders.order_id as order_id,sales.customer_id as sale_customer_id,orders.customer_id as order_customer_id
+ # ,bookings.booking_id,sales.sale_id as sale_id,dining_facilities.name as table_name")
+ # .joins("left join booking_orders on booking_orders.order_id = orders.order_id
+ # left join bookings on bookings.booking_id = booking_orders.order_id
+ # left join dining_facilities on dining_facilities.id = bookings.dining_facility_id
+ # left join order_items on order_items.order_id = orders.order_id
+ # left join sale_orders on sale_orders.order_id = orders.order_id
+ # left join sales on sales.sale_id = sale_orders.sale_id")
+ # .where("(orders.status = 'new' or orders.status = 'billed')")
+ # .group("orders.order_id")
+ # For PG
+ # .where("dining_facilities.is_active=? and orders.date between ? and ?",true,from,to)
+ # .group("orders.order_id,order_items.order_items_id,dining_facilities.name,sales.receipt_no,bookings.booking_id,sales.sale_id,orders.customer_id")
- .where("dining_facilities.is_active=? and orders.date between ? and ?",true,from,to)
- .group("orders.id")
end
+
+ def self.search(search)
+ if search
+ # find(:all, :conditions => ['name LIKE ? OR contact_no LIKE ?', "%#{search}%", "%#{search}%"])
+ where("order_id LIKE ?", "%#{search}%")
+ else
+ find(:all)
+ end
+ end
+
+ private
+
+ def generate_custom_id
+ self.order_id = SeedGenerator.generate_id(self.class.name, "ODR")
+ end
+
+ def set_order_date
+ self.date = Time.now.utc
+ end
+
end
diff --git a/app/models/order_item.rb b/app/models/order_item.rb
index 1633c1c4..564aa939 100644
--- a/app/models/order_item.rb
+++ b/app/models/order_item.rb
@@ -1,5 +1,8 @@
class OrderItem < ApplicationRecord
+ self.primary_key = "order_items_id"
+
#primary key - need to be unique
+ before_create :generate_custom_id
#Associations
belongs_to :order, autosave: true
@@ -32,14 +35,33 @@ class OrderItem < ApplicationRecord
#logger.debug orderitem.to_yml
orderitem.save!
-
-
end
+
#Origami : Cashier : to show order items details
- def self.get_order_items_details(order_id)
+ def self.get_order_items_details(booking_id)
+ # booking_orders = BookingOrder.where("booking_id=?",booking.booking_id)
+ # if booking_orders
+ # booking_orders.each do |book_order|
+ # order_details = OrderItem.select("order_items.item_name,order_items.qty,order_items.price,(order_items.qty*order_items.price) as total_price")
+ # .joins("left join orders on orders.order_id = order_items.order_id")
+ # .where("order_items.order_id=?",book_order.order)
+ # return order_details
+ # end
+ # else
+ # return false
+ # end
+
order_details = OrderItem.select("order_items.item_name,order_items.qty,order_items.price,(order_items.qty*order_items.price) as total_price")
- .joins("left join orders on orders.id = order_items.order_id")
- .where("order_items.order_id=?",order_id)
-
+ .joins("left join orders on orders.order_id = order_items.order_id")
+ .joins("left join booking_orders on booking_orders.order_id = order_items.order_id")
+ .joins("left join bookings on bookings.booking_id = booking_orders.booking_id")
+ .where("bookings.booking_id=?",booking_id)
+
+ return order_details
+ end
+
+ private
+ def generate_custom_id
+ self.order_items_id = SeedGenerator.generate_id(self.class.name, "ODI")
end
end
diff --git a/app/models/order_queue_station.rb b/app/models/order_queue_station.rb
index b0619af2..874f2fb0 100644
--- a/app/models/order_queue_station.rb
+++ b/app/models/order_queue_station.rb
@@ -5,10 +5,12 @@
class OrderQueueStation < ApplicationRecord
has_many :assigned_order_items
has_many :order_items
+ has_many :order_queue_process_by_zones
+ has_many :zones, through: :order_queue_process_by_zones
scope :active, -> {where(is_active: true)}
- def process_order (order)
+ def process_order (order)
oqs_stations = OrderQueueStation.active
order_items = order.order_items
@@ -20,10 +22,10 @@ class OrderQueueStation < ApplicationRecord
#Loop through the processing items
pq_items.each do |pq_item|
#Processing through the looping items
- order_items.each do |order_item|
+ order_items.each do |order_item|
if (pq_item == order_item.item_code)
#Same Order_items can appear in two location.
- AssignedOrderItem.assigned_order_item(order, order_item.item_code, oqs)
+ AssignedOrderItem.assigned_order_item(order, order_item.item_code, oqs)
end
end
diff --git a/app/models/printer/order_queue_printer.rb b/app/models/printer/order_queue_printer.rb
index 6a8a4b78..9b3f5205 100644
--- a/app/models/printer/order_queue_printer.rb
+++ b/app/models/printer/order_queue_printer.rb
@@ -1,45 +1,47 @@
class Printer::OrderQueuePrinter < Printer::PrinterWorker
- def print_order_item(printer_settings,order_id, item_code)
+ def print_order_item(printer_name,order_id, item_code)
#Use CUPS service
#Generate PDF
#Print
order_item= print_query('order_item', item_code) #OrderItem.find_by_item_code(item_code)
- pdf = OrderItemPdf.new(order_item[0],printer_settings)
+ pdf = OrderItemPdf.new(order_item[0])
pdf.render_file "tmp/receipt.pdf"
- self.print("tmp/receipt.pdf")
+ self.print("tmp/receipt.pdf", printer_name)
end
- def print_order_summary(printer_settings,booking_id)
+ def print_order_summary(printer_name,order_id)
#Use CUPS service
#Generate PDF
#Print
- order=print_query('booking',booking_id)
- filename = "tmp/order_summary_#{booking_id}" + ".pdf"
- pdf = OrderSummaryPdf.new(order,printer_settings)
+ order=print_query('order_summary',order_id)
+ filename = "tmp/order_summary_#{order_id}" + ".pdf"
+ pdf = OrderSummaryPdf.new(order)
pdf.render_file filename
- self.print(filename)
+ self.print(filename, printer_name)
end
# Query for OQS with status
def print_query(type, code)
if type == 'order_item'
- OrderItem.select("order_items.item_code, order_items.item_name,order_items.item_order_by as order_by, order_items.created_at as order_at, cus.name as customer, df.name as dining")
- .joins("left join orders ON orders.id = order_items.order_id
+ OrderItem.select("order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.item_order_by as order_by, order_items.created_at as order_at, cus.name as customer, df.name as dining")
+ .joins("left join orders ON orders.order_id = order_items.order_id
left join booking_orders AS bo ON bo.order_id=order_items.order_id
- left join bookings AS b ON b.id = bo.booking_id
+ left join bookings AS b ON b.booking_id = bo.booking_id
left join dining_facilities AS df ON df.id = b.dining_facility_id
- left join customers as cus ON cus.id = orders.customer_id")
- .where("order_items.item_code=" + code)
+ left join customers as cus ON cus.customer_id = orders.customer_id")
+ .where("order_items.item_code='" + code + "'")
.group("order_items.item_code")
else
- OrderItem.select("order_items.item_code, order_items.item_name, df.name as dining")
- .joins("left join orders ON orders.id = order_items.order_id
+ OrderItem.select("order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.item_order_by as order_by, order_items.created_at as order_at, cus.name as customer, df.name as dining")
+ .joins("left join orders ON orders.order_id = order_items.order_id
left join booking_orders AS bo ON bo.order_id=order_items.order_id
- left join bookings AS b ON b.id = bo.booking_id
- left join dining_facilities AS df ON df.id = b.dining_facility_id")
- .where("booking.id=" + code)
+ left join bookings AS b ON b.booking_id = bo.booking_id
+ left join dining_facilities AS df ON df.id = b.dining_facility_id
+ left join customers as cus ON cus.customer_id = orders.customer_id")
+ .where("orders.order_id='" + code + "'")
+ .group("order_items.item_code")
end
end
diff --git a/app/models/printer/receipt_printer.rb b/app/models/printer/receipt_printer.rb
index d25dc8c3..92468b0e 100644
--- a/app/models/printer/receipt_printer.rb
+++ b/app/models/printer/receipt_printer.rb
@@ -63,13 +63,34 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker
self.print(filename)
end
-#Bill Receipt Print
- def print_receipt_bill(printer_settings,sale_items,sale)
+
+ #Bill Receipt Print
+ def print_receipt_bill(printer_settings,sale_items,sale_data, customer_name, food_total, beverage_total, member_info = nil)
#Use CUPS service
#Generate PDF
#Print
- pdf = ReceiptBillPdf.new(printer_settings,sale_items,sale)
- pdf.render_file "tmp/receipt_bill_#{sale.id}.pdf"
- self.print("tmp/receipt_bill_#{sale.id}.pdf")
+ pdf = ReceiptBillPdf.new(printer_settings, sale_items, sale_data, customer_name, food_total, beverage_total, member_info)
+ pdf.render_file "tmp/receipt_bill.pdf"
+ self.print("tmp/receipt_bill.pdf")
+ end
+
+ #Queue No Print
+ def print_queue_no(printer_settings,queue)
+ #Use CUPS service
+ #Generate PDF
+ #Print
+ pdf = QueueNoPdf.new(printer_settings,queue)
+ pdf.render_file "tmp/print_queue_no.pdf"
+ self.print("tmp/print_queue_no.pdf")
+ end
+
+ #Bill Receipt Print
+ def print_crm_order(booking,order_items,setting)
+ #Use CUPS service
+ #Generate PDF
+ #Print
+ pdf = CrmOrderPdf.new(booking,order_items,setting)
+ pdf.render_file "tmp/print_crm_order.pdf"
+ self.print("tmp/print_crm_order.pdf")
end
end
diff --git a/app/models/room_booking.rb b/app/models/room_booking.rb
index fb7c0dac..7efa52cb 100644
--- a/app/models/room_booking.rb
+++ b/app/models/room_booking.rb
@@ -1,3 +1,4 @@
class RoomBooking < Booking
-
+ has_many :orders
+
end
diff --git a/app/models/sale.rb b/app/models/sale.rb
index ca3bd631..9683c2b2 100644
--- a/app/models/sale.rb
+++ b/app/models/sale.rb
@@ -1,6 +1,8 @@
-#primary key - need to be unique generated for multiple shops
-
class Sale < ApplicationRecord
+ self.primary_key = "sale_id"
+
+ #primary key - need to be unique generated for multiple shops
+ before_create :generate_custom_id
#before_create :generate_receipt_no
belongs_to :cashier, :optional => true
belongs_to :customer, :optional => true
@@ -10,6 +12,7 @@ class Sale < ApplicationRecord
has_many :sale_taxes
has_many :sale_payments
has_many :sale_orders
+ has_many :bookings
scope :open_invoices, -> { where("sale_status = 'new' and receipt_date BETWEEN '#{DateTime.now.utc.end_of_day}' AND '#{DateTime.now.utc.beginning_of_day}'") }
@@ -22,18 +25,19 @@ class Sale < ApplicationRecord
#get all order attached to this booking and combine into 1 invoice
booking.booking_orders.each do |order|
if booking.sale_id
- status, sale_id = generate_invoice_from_order(order.order_id, nil, requested_by)
+ status, sale_id = generate_invoice_from_order(order.order_id, nil, booking, requested_by)
else
- status, sale_id = generate_invoice_from_order(order.order_id, booking.sale_id, requested_by)
+ status, sale_id = generate_invoice_from_order(order.order_id, booking.sale_id, booking, requested_by)
end
booking.sale_id = sale_id
end
-
- return status
+ order = booking.booking_orders.take.order
+ link_order_sale(order.id)
+ return status, sale_id
end
end
- def generate_invoice_from_order (order_id, sale_id, requested_by)
+ def generate_invoice_from_order (order_id, sale_id, booking, requested_by)
taxable = true
#if sale_id is exsit and validate
#add order to that invoice
@@ -49,10 +53,14 @@ class Sale < ApplicationRecord
generate_receipt_no
order = Order.find(order_id)
- #Default - Values
- self.tax_type = "execlusive"
+ #Default Tax - Values
+ self.tax_type = "exclusive"
+
+ # set cashier by current login
+ self.cashier_id = requested_by.id
+ self.cashier_name = requested_by.name
+ self.requested_by = requested_by.name
- self.requested_by = requested_by
self.requested_at = DateTime.now.utc
Rails.logger.debug "Order -> #{order.id} | order_status -> #{order.status}"
@@ -70,11 +78,17 @@ class Sale < ApplicationRecord
self.save!
- #compute summary
+
+ #compute sales summary
compute
#Update the order items that is billed
order.update_items_status_to_billed(nil)
+ order.status = "billed"
+ order.save
+
+ booking.sale_id = self.id
+ booking.save
return true, self.id
end
@@ -172,6 +186,7 @@ class Sale < ApplicationRecord
end
+ # Tax Calculate
def apply_tax(total_taxable)
#if tax is not apply create new record
@@ -207,6 +222,7 @@ class Sale < ApplicationRecord
private
+
def product_get_unit_price(item_code)
menu_item_hash =MenuItem.search_by_item_code(item_code)
if (menu_instance_code)
@@ -217,9 +233,15 @@ class Sale < ApplicationRecord
def link_order_sale(order_id)
#create if it doesn't exist
- if (SaleOrder.where("sale_id = #{self.id} and order_id=#{order_id}").nil?)
- SaleOrder.create(:sale_id => self.id, :order_id => order_id)
+ saleOrder = SaleOrder.where("sale_id=? and order_id=?", self.id, order_id).take
+
+ if saleOrder.nil?
+ sale_order = SaleOrder.new
+ sale_order.create_sale_order(self.id, order_id)
end
+ # if (SaleOrder.where("sale_id = #{self.id} and order_id=#{order_id}").nil?)
+ # SaleOrder.create(:sale_id => self.id, :order_id => order_id)
+ # end
#dosomrting here
#puts Time.now.format(":short")
end
@@ -235,11 +257,29 @@ class Sale < ApplicationRecord
if self.receipt_no.nil?
prefix = DateTime.now().utc
#self.receipt_no = prefix.to_s + "/" + self.shit_id.to_s + "/" + SeedGenerator.new_receipt_no().to_s
- self.receipt_no = prefix.strftime("%Y%m%d") + "/" + SeedGenerator.new_receipt_no().to_s
+ self.receipt_no = prefix.strftime("%Y%m%d") + "-" + SeedGenerator.new_receipt_no().to_s
self.receipt_date = prefix
Rails.logger.debug "Receipt No #{self.receipt_no} | Date #{ self.receipt_date.to_s}"
end
end
+ def self.search(search)
+ if search
+ # find(:all, :conditions => ['name LIKE ? OR contact_no LIKE ?', "%#{search}%", "%#{search}%"])
+ where("receipt_no LIKE ?", "%#{search}%",)
+ else
+ find(:all)
+ end
+ end
+
+ private
+
+ def generate_custom_id
+ self.sale_id = SeedGenerator.generate_id(self.class.name, "SAL")
+ end
+
+ def self.get_receipt_no_list(from,to)
+ sale = Sale.where("sale_status=? and receipt_date between ? and ?","completed",from,to)
+ end
end
diff --git a/app/models/sale_audit.rb b/app/models/sale_audit.rb
index cce6982d..f8c38857 100644
--- a/app/models/sale_audit.rb
+++ b/app/models/sale_audit.rb
@@ -1,21 +1,35 @@
class SaleAudit < ApplicationRecord
-#primary key - need to be unique generated for multiple shops
-
+ self.primary_key = "sale_audit_id"
+
+ #primary key - need to be unique generated for SaleAudit
+ before_create :generate_custom_id
+
belongs_to :sale
- def record_audit_void(sale_id, void_by, approved_by, reason)
+ def self.record_audit_void(sale_id, void_by, approved_by, reason)
#sale_audit
- sale_audit = SaleAudit.new()
- sale_audit.sale_id = sale_id
- sale_audit.action = "SALEVOID"
- sale_audit.action_at = DateTime.now.utc
- sale_audit.action_by = void_by
+ sale_audit = SaleAudit.new()
+ sale_audit.sale_id = sale_id
+ sale_audit.action = "SALEVOID"
+ sale_audit.action_at = DateTime.now.utc
+ sale_audit.action_by = void_by
sale_audit.approved_by = approved_by
- sale_audit.remark = reason
+ sale_audit.remark = reason
sale_audit.save!
#sale_audit.
end
+ def self.record_audit_complete(sale_id, remark, action_by)
+ sale_audit = SaleAudit.new()
+ sale_audit.sale_id = sale_id
+ sale_audit.action = "SALECOMPLETE"
+ sale_audit.action_at = DateTime.now.utc
+ sale_audit.action_by = action_by
+ sale_audit.remark = remark
+ sale_audit.approved_by = Time.now
+ sale_audit.save!
+ end
+
def record_audit_discount(sale_id, discount_by, approved_by, reason)
#sale_audit
sale_audit = SaleAudit.new()
@@ -41,13 +55,19 @@ class SaleAudit < ApplicationRecord
sale_audit.save!
end
- def record_payment(sale_id, remark, action_by)
+ def self.record_payment(sale_id, remark, action_by)
sale_audit = SaleAudit.new()
sale_audit.sale_id = sale_id
sale_audit.action = "SALEPAYMENT"
sale_audit.action_at = DateTime.now.utc
sale_audit.action_by = action_by
sale_audit.remark = remark
+ sale_audit.approved_by = Time.now
sale_audit.save!
end
+
+ private
+ def generate_custom_id
+ self.sale_audit_id = SeedGenerator.generate_id(self.class.name, "SAI")
+ end
end
diff --git a/app/models/sale_item.rb b/app/models/sale_item.rb
index c92ed48f..c49e9317 100644
--- a/app/models/sale_item.rb
+++ b/app/models/sale_item.rb
@@ -1,9 +1,80 @@
class SaleItem < ApplicationRecord
-#primary key - need to be unique generated for multiple shops
+ self.primary_key = "sale_item_id"
+
+ #primary key - need to be unique generated for multiple shops
+ before_create :generate_custom_id
belongs_to :sale
#compute items - discount, tax, price_change
def compute_item
end
+
+
+ def self.get_order_items_details(sale_id)
+ order_details = SaleItem.select("sales.total_tax as tax_amount, sales.grand_total as grand_total_amount , sales.total_discount as discount_amount,sales.receipt_date as receipt_date,
+ sales.cashier_name,sales.receipt_no,sale_items.product_name as item_name,sale_items.qty,sale_items.price,sale_items.unit_price as total_price")
+ .joins("left join sales on sales.sale_id = sale_items.sale_id")
+ .where("sale_items.sale_id=?",sale_id)
+
+ # sale_orders = SaleOrder.where("sale_id=?",sale_id)
+ # if sale_orders
+ # sale_orders.each do |sale_order|
+ # order_details = SaleItem.select("sales.total_discount as discount_amount,DATE_FORMAT(sales.receipt_date,'%Y-%m-%d %h:%m') as receipt_date,sales.cashier_name,sales.receipt_no,sale_items.product_name as item_name,sale_items.qty,sale_items.price,sale_items.unit_price as total_price")
+ # .joins("left join sales on sales.id = sale_items.sale_id")
+ # .where("sale_items.sale_id=?",sale_order.sale_id)
+ # return order_details
+ # end
+ # else
+ # return false
+ # end
+ end
+
+ def self.calculate_food_beverage(sale_items)
+ food_prices=0
+ beverage_prices=0
+
+ sale_items.each do |si|
+ food_price, beverage_price = self.get_price(si.sale_item_id)
+
+ food_prices = food_prices + food_price
+ beverage_prices = beverage_prices + beverage_price
+ end
+ puts food_prices
+ puts beverage_prices
+ return food_prices, beverage_prices
+ end
+
+ def self.get_price(sale_item_id)
+ food_price=0
+ beverage_price=0
+
+ item=SaleItem.select("sale_items.price , menu_items.account_id")
+ .joins("left join menu_items on menu_items.item_code = sale_items.product_code")
+ .where("sale_items.sale_item_id=?", sale_item_id.to_s)
+ if item[0].account_id == 1
+ food_price = item[0].price
+ else
+ beverage_price = item[0].price
+ end
+
+ return food_price, beverage_price
+ end
+
+ def self.get_overall_discount(sale_id)
+ price = 0.0
+ item=SaleItem.where("product_code=?", sale_id)
+
+ item.each do|i|
+ price += i.price
+ end
+
+ return price
+ end
+
+ private
+ def generate_custom_id
+ self.sale_item_id = SeedGenerator.generate_id(self.class.name, "SLI")
+
+ end
end
diff --git a/app/models/sale_order.rb b/app/models/sale_order.rb
index 23fd39bd..786054c9 100644
--- a/app/models/sale_order.rb
+++ b/app/models/sale_order.rb
@@ -1,6 +1,23 @@
class SaleOrder < ApplicationRecord
-#primary key - need to be unique generated for multiple shops
+ self.primary_key = "sale_order_id"
+
+ #primary key - need to be unique generated for multiple shops
+ before_create :generate_sale_order_id
belongs_to :sale
belongs_to :order
+
+ def create_sale_order(sale, order)
+ self.sale_id = sale
+ self.order_id = order
+ self.save
+
+ end
+
+ private
+ def generate_sale_order_id
+ self.class.name
+ saleOrderId = SeedGenerator.generate_id(self.class.name, "SOI")
+ self.sale_order_id = saleOrderId
+ end
end
diff --git a/app/models/sale_payment.rb b/app/models/sale_payment.rb
index 2f7b72ea..465a8e5b 100644
--- a/app/models/sale_payment.rb
+++ b/app/models/sale_payment.rb
@@ -1,14 +1,19 @@
class SalePayment < ApplicationRecord
-#primary key - need to be unique generated for multiple shops
+ self.primary_key = "sale_payment_id"
+
+ #primary key - need to be unique generated for multiple shops
+ before_create :generate_custom_id
belongs_to :sale
- :attr_accessor :received_amount, :card_payment_reference, :voucher_no, :giftcard_no, :customer_id, :external_payment_status
+ attr_accessor :received_amount, :card_payment_reference, :voucher_no, :giftcard_no, :customer_id, :external_payment_status
+
+ def process_payment(invoice, action_by, cash_amount, payment_method)
- def process_payment(invoice, action_by)
self.sale = invoice
-
+ self.received_amount = cash_amount
amount_due = invoice.grand_total
+
#get all payment for this invoices
invoice.sale_payments.each do |payment|
if (payment.payment_status == "paid" )
@@ -19,34 +24,35 @@ class SalePayment < ApplicationRecord
if (amount_due > 0)
payment_status = false
#route to payment type
- switch (payment_method)
- case "cash"
+ case payment_method
+ when "cash"
payment_status = cash_payment
- case "creditnote"
- payment_status = creditnote_payment
- case "visa"
- payment_status = external_terminal_card_payment(:visa)
- case "master"
- payment_status = external_terminal_card_payment(:master)
- case "jcb"
- payment_status = external_terminal_card_payment(:jcb)
- case "mpu"
- payment_status = external_terminal_card_payment(:mpu)
- case "unionpay"
- payment_status = external_terminal_card_payment(:unionpay)
- case "vochure"
- payment_status = vochure_payment
- case "giftcard"
- payment_status = giftcard_payment
- case "paypar"
- #TODO: implement paypar implementation
+ when "creditnote"
+ if !self.customer_id.nil?
+ payment_status = creditnote_payment(self.customer_id)
+ end
+ when "visa"
+ payment_status = external_terminal_card_payment(:visa)
+ when "master"
+ payment_status = external_terminal_card_payment(:master)
+ when "jcb"
+ payment_status = external_terminal_card_payment(:jcb)
+ when "mpu"
+ payment_status = external_terminal_card_payment(:mpu)
+ when "unionpay"
+ payment_status = external_terminal_card_payment(:unionpay)
+ when "vochure"
+ payment_status = vochure_payment
+ when "giftcard"
+ payment_status = giftcard_payment
+ when "paypar"
payment_status = paypar_payment
+ else
+ puts "it was something else"
end
-
-
#record an payment in sale-audit
- remark = "Payment #{payment_method}- for Invoice #{invoice.receipt_no} Due [#{amount_due}]| pay amount -> #{amount} | Payment Status ->#{payment_status}"
+ remark = "Payment #{payment_method}- for Invoice #{invoice.receipt_no} Due [#{amount_due}]| pay amount -> #{cash_amount} | Payment Status ->#{payment_status}"
sale_audit = SaleAudit.record_payment(invoice.id, remark, action_by)
return true, self.sale
@@ -58,24 +64,62 @@ class SalePayment < ApplicationRecord
return false, "No outstanding Amount"
end
+ end
+
+ def self.get_paypar_account(url,token,membership_id,campaign_type_id,merchant_uid,auth_token)
+ response = HTTParty.get(url,
+ :body => { app_token: token,membership_id:membership_id,campaign_type_id:campaign_type_id,merchant_uid:merchant_uid,auth_token:auth_token}.to_json,
+ :headers => {
+ 'Content-Type' => 'application/json',
+ 'Accept' => 'application/json'
+ }
+ )
+ return response;
+
+ end
+
+ def self.redeem(paypar_url,token,membership_id,received_amount,sale_id)
+ membership_actions_data = MembershipAction.find_by_membership_type("redeem");
+ if !membership_actions_data.nil?
+ url = paypar_url.to_s + membership_actions_data.gateway_url.to_s
+ merchant_uid = membership_actions_data.merchant_account_id
+ auth_token = membership_actions_data.auth_token
+ campaign_type_id = membership_actions_data.additional_parameter["campaign_type_id"]
+ sale_data = Sale.find_by_sale_id(sale_id)
+ if sale_data
+ response = HTTParty.post(url,
+ :body => { generic_customer_id:membership_id,redeem_amount:received_amount,receipt_no:sale_data.receipt_no,campaign_type_id:campaign_type_id,account_no:"",merchant_uid:merchant_uid,auth_token:auth_token}.to_json,
+ :headers => {
+ 'Content-Type' => 'application/json',
+ 'Accept' => 'application/json'
+ }
+ )
+ else
+ response = false;
+ end
+
+ else
+ response =false;
+ end
+ return response;
+
end
private
def cash_payment
payment_status = false
-
self.payment_method = "cash"
self.payment_amount = self.received_amount
- self.outstanding_amount = self.sale.grand_total - received_amount
+ self.outstanding_amount = self.sale.grand_total.to_f - self.received_amount.to_f
self.payment_status = "paid"
payment_method = self.save!
-
sale_update_payment_status(self.received_amount)
return payment_status
end
- def creditnote_payment(self.customer_id)
+ def creditnote_payment(customer_id)
+
payment_status = false
self.payment_method = "creditnote"
@@ -96,7 +140,7 @@ class SalePayment < ApplicationRecord
self.payment_method = method
self.payment_amount = self.received_amount
self.payment_reference = self.card_payment_reference
- self.outstanding_amount = self.sale.grand_total- self.received_amount
+ self.outstanding_amount = self.sale.grand_total.to_f - self.received_amount.to_f
self.payment_status = "paid"
payment_method = self.save!
@@ -140,20 +184,101 @@ class SalePayment < ApplicationRecord
end
def paypar_payment
- ##TODO - Integration with Paypar (SmartPay)
+ payment_status = false
+
+ #Next time - validate if the vochure number is valid - within
+
+ customer_data = Customer.find_by_customer_id(self.sale.customer_id)
+ membership_setting = MembershipSetting.find_by_membership_type("paypar_url")
+ membership_data = SalePayment.redeem(membership_setting.gateway_url,membership_setting.auth_token,customer_data.membership_id,self.received_amount,self.sale.sale_id)
+ if membership_data["status"]==true
+ self.payment_method = "paypar"
+ self.payment_amount = self.received_amount
+ self.payment_reference = self.voucher_no
+ self.outstanding_amount = self.sale.grand_total.to_f - self.received_amount.to_f
+ self.payment_status = "pending"
+ payment_method = self.save!
+ SalePayment.where(:sale_payment_id => self.sale_payment_id).update_all(:payment_status => 'paid')
+ sale_update_payment_status(self.received_amount.to_f)
+
+ else
+ sale_update_payment_status(0)
+ end
+
+ return payment_status
+
end
def sale_update_payment_status(paid_amount)
-
#update amount_outstanding
- self.sale.amount_received = self.sale.amount_received + paid_amount
- self.sale.amount_changed = amount - self.sale.amount_received
- if (self.sale.grand_total <= self.sale.amount_received && self.sale.amount_changed > 0)
+ self.sale.amount_received = self.sale.amount_received.to_f + paid_amount.to_f
+ self.sale.save!
+ self.sale.amount_changed = self.sale.amount_received.to_f - self.sale.grand_total.to_f
+ all_received_amount = 0.0
+ sObj = Sale.find(self.sale_id)
+ sObj.sale_payments.each do |spay|
+ all_received_amount += spay.payment_amount.to_f
+ end
+ if (self.sale.grand_total <= all_received_amount)
self.sale.payment_status = "paid"
self.sale.sale_status = "completed"
self.sale.save!
+ table_update_status(sObj)
+ rebat(sObj)
end
end
+ def table_update_status(sale_obj)
+ booking = Booking.find_by_sale_id(sale_obj.id)
+ if booking
+ table = DiningFacility.find(booking.dining_facility_id)
+ if table
+ table.status = "available"
+ table.save
+ end
+ end
+ end
+
+ def rebat(sObj)
+ food_prices, beverage_prices = SaleItem.calculate_food_beverage(sObj.sale_items)
+ generic_customer_id = sObj.customer.membership_id
+ if generic_customer_id != nil || generic_customer_id != "" || generic_customer_id != 0
+ paypar = sObj.sale_payments
+ payparcost = 0
+ paypar.each do |pp|
+ if pp.payment_method == "paypar"
+ payparcost = payparcost + pp.payment_amount
+ end
+ end
+ overall_dis = SaleItem.get_overall_discount(sObj.id)
+ total_amount = food_prices - payparcost + overall_dis
+ puts "total_amount"
+ puts food_prices
+ puts payparcost
+ puts total_amount
+ if total_amount > 0
+ receipt_no = sObj.receipt_no
+ membership = MembershipSetting.find_by_membership_type("paypar_url")
+ memberaction = MembershipAction.find_by_membership_type("rebate")
+ merchant_uid = memberaction.merchant_account_id.to_s
+ campaign_type_id = memberaction.additional_parameter["campaign_type_id"]
+ auth_token = memberaction.auth_token.to_s
+ url = membership.gateway_url.to_s + memberaction.gateway_url.to_s
+ response = HTTParty.post(url, :body => { generic_customer_id:generic_customer_id ,merchant_uid:merchant_uid,total_amount: total_amount,campaign_type_id: campaign_type_id,
+ receipt_no: receipt_no,auth_token:auth_token}.to_json,
+ :headers => {
+ 'Content-Type' => 'application/json',
+ 'Accept' => 'application/json'
+ })
+ puts "haha"
+ puts response.to_json
+ end
+ end
+ end
+
+ private
+ def generate_custom_id
+ self.sale_payment_id = SeedGenerator.generate_id(self.class.name, "SPI")
+ end
end
diff --git a/app/models/sale_tax.rb b/app/models/sale_tax.rb
index 6e0a2d47..79de9134 100644
--- a/app/models/sale_tax.rb
+++ b/app/models/sale_tax.rb
@@ -1,5 +1,12 @@
class SaleTax < ApplicationRecord
-#primary key - need to be unique generated for multiple shops
+ self.primary_key = "sale_tax_id"
+ #primary key - need to be unique generated for multiple shops
+ before_create :generate_custom_id
belongs_to :sale
+
+ private
+ def generate_custom_id
+ self.sale_tax_id = SeedGenerator.generate_id(self.class.name, "STI")
+ end
end
diff --git a/app/models/seed_generator.rb b/app/models/seed_generator.rb
index 4351e74b..fe896a4d 100644
--- a/app/models/seed_generator.rb
+++ b/app/models/seed_generator.rb
@@ -1,7 +1,9 @@
class SeedGenerator < ApplicationRecord
+
def self.generate_id(model, prefix)
seed = SeedGenerator.find_by_model(model)
new_receipt_no = 0
+
if (seed.nil?)
seed = SeedGenerator.new()
seed.model = model
@@ -15,7 +17,10 @@ class SeedGenerator < ApplicationRecord
seed.save
end
- return prefix + "-" + seed.current.to_s
+ padding_len = 15 - prefix.length
+ saleOrderId = prefix +"-"+ seed.current.to_s.to_s.rjust((14-prefix.length)+1,'0')
+ return saleOrderId
+
end
def self.new_receipt_no
diff --git a/app/models/test.rb b/app/models/test.rb
deleted file mode 100644
index fe0afa77..00000000
--- a/app/models/test.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class Test < ApplicationRecord
-end
diff --git a/app/models/transactions.rb b/app/models/transactions.rb
deleted file mode 100644
index 9cffb0d1..00000000
--- a/app/models/transactions.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-module Transactions
- def self.table_name_prefix
- 'transactions_'
- end
-end
diff --git a/app/models/zone.rb b/app/models/zone.rb
index e5ad15c7..164b80f4 100644
--- a/app/models/zone.rb
+++ b/app/models/zone.rb
@@ -2,7 +2,12 @@ class Zone < ApplicationRecord
# model association
has_many :tables, dependent: :destroy
has_many :rooms, dependent: :destroy
+ has_many :order_queue_stations
# validations
validates_presence_of :name, :created_by
+
+ def self.collection
+ Zone.select("id, name").map { |e| [e.name, e.id] }
+ end
end
diff --git a/app/pdf/crm_order_pdf.rb b/app/pdf/crm_order_pdf.rb
new file mode 100644
index 00000000..55d08ecc
--- /dev/null
+++ b/app/pdf/crm_order_pdf.rb
@@ -0,0 +1,136 @@
+class CrmOrderPdf < Prawn::Document
+ attr_accessor :receipt_width,:price_column_width,:p_width, :page_height, :margin, :price_width, :item_width, :header_font_size, :item_font_size,:item_height,:qty_column_width,:item_description_width
+ def initialize(booking,order_items,printer_settings)
+ self.p_width = 200
+ self.page_height = 1450
+ self.margin = 10
+ # self.price_width = self.p_width / 2
+ self.price_width=80
+ self.item_width = self.p_width - self.price_width
+ self.item_height = self.item_height
+ self.qty_column_width = self.p_width / 2
+ self.item_description_width=self.p_width - self.price_width
+ self.receipt_width=130
+
+ @item_width = self.p_width.to_i / 2
+ @qty_width = @item_width.to_i / 3
+ @double = @qty_width * 1.3
+ @half_qty = @qty_width / 2
+ #setting page margin and width
+ super(:margin => [self.margin, self.margin, self.margin, self.margin], :page_size => [self.p_width, self.page_height])
+ self.header_font_size = 10
+ self.item_font_size = 9
+
+ header( printer_settings.printer_name, printer_settings.name)
+ stroke_horizontal_rule
+ cashier_info(booking)
+ line_items(order_items)
+
+
+ end
+
+ def header (printer_name, name)
+ text "#{printer_name}", :size => self.header_font_size,:align => :center
+ move_down 5
+ text "#{name}", :size => self.header_font_size,:align => :center
+ # move_down self.item_height
+ move_down 5
+
+ stroke_horizontal_rule
+
+ end
+
+ def cashier_info(booking)
+ move_down 5
+ move_down 2
+ y_position = cursor
+ bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
+ text "Order By:", :size => self.item_font_size,:align => :left
+ end
+
+ bounding_box([self.price_width, y_position], :width =>self.receipt_width) do
+ text "#{booking.checkin_by}" , :size => self.item_font_size, :align => :left
+ end
+ move_down 5
+
+ y_position = cursor
+ bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
+ text "Customer:", :size => self.item_font_size,:align => :left
+ end
+ bounding_box([self.price_width,y_position], :width =>self.price_width) do
+ text "#{booking.customer_id}" , :size => self.item_font_size,:align => :left
+ end
+ move_down 5
+
+ y_position = cursor
+ bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
+ text "Date:", :size => self.item_font_size,:align => :left
+ end
+ bounding_box([self.price_width,y_position], :width =>self.price_width) do
+ text "#{booking.checkin_at.strftime('%Y %m %d %h:%m')}" , :size => self.item_font_size,:align => :left
+ end
+ # stroke_horizontal_rule
+ move_down 5
+ end
+
+ def line_items(order_items)
+ y_position = cursor
+ qty_column_width = self.p_width * 0.2
+ item_description_width = self.p_width * 0.5
+ price_column_width = self.p_width * 0.3
+
+
+
+ stroke_horizontal_rule
+ move_down 5
+ y_position = cursor
+ pad_top(15) {
+ # @item_width.to_i + @half_qty.to_i
+ text_box "Items", :at =>[0,y_position], :width => @item_width.to_i - @half_qty.to_i , :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size
+ text_box "Price", :at =>[@item_width.to_i - @half_qty.to_i,y_position], :width => @qty_width, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
+ text_box "Qty", :at =>[@item_width.to_i-@qty_width,y_position], :width => @half_qty, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
+ text_box "Total", :at =>[@item_width.to_i + @half_qty.to_i,y_position], :width => @double, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
+
+ }
+
+ move_down 5
+ stroke_horizontal_rule
+
+ add_line_item_row(order_items)
+
+
+ end
+
+ def add_line_item_row(order_items)
+ y_position = cursor
+ move_down 5
+ sub_total = 0.0
+ order_items.each do |item|
+
+ sub_total += item.qty*item.price
+ qty = item.qty
+ total_price = item.qty*item.price
+ price = item.price
+ item_name = item.item_name
+
+
+ y_position = cursor
+
+ pad_top(15) {
+ # @item_width.to_i + @half_qty.to_i
+ text_box "#{item_name}", :at =>[0,y_position], :width => @item_width.to_i - @half_qty.to_i , :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size
+ text_box "#{price}", :at =>[@item_width.to_i - @half_qty.to_i,y_position], :width => @qty_width, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
+ text_box "#{qty.to_i}", :at =>[@item_width.to_i-@qty_width,y_position], :width => @half_qty, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
+ text_box "#{total_price}", :at =>[@item_width.to_i + @half_qty.to_i,y_position], :width => @double, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
+
+ }
+ move_down 3
+ end
+ stroke_horizontal_rule
+ move_down 5
+ y_position = cursor
+
+ end
+
+
+end
diff --git a/app/pdf/order_item_pdf.rb b/app/pdf/order_item_pdf.rb
index 356327b4..96008dfd 100644
--- a/app/pdf/order_item_pdf.rb
+++ b/app/pdf/order_item_pdf.rb
@@ -1,31 +1,96 @@
class OrderItemPdf < Prawn::Document
+ attr_accessor :label_width,:price_column_width,:page_width, :page_height, :margin, :price_width, :item_width, :header_font_size, :item_font_size,:item_height,:qty_width,:total_width,:item_description_width
+ def initialize(order_item)
+ self.page_width = 254
+ self.page_height = 1450
+ self.margin = 10
+ self.price_width = 40 # No Need for item
+ self.qty_width = 34
+ self.total_width = 40 # No Need for item
+ self.item_width = self.page_width - (self.qty_width + (self.margin*4))
+ self.item_height = 15
+ self.item_description_width = self.page_width - (self.price_width + self.qty_width + self.total_width)
+ self.label_width=80
- def initialize(order_item, print_settings)
- super(:margin => [10, 5, 30, 5], :page_size => [200,400])
+ super(:margin => [self.margin, self.margin, self.margin, self.margin], :page_size => [self.page_width, self.page_height])
+ # super(:margin => [10, 5, 30, 5], :page_size => [200,400])
# font "public/fonts/#{font_name}".to_s + ".ttf".to_s
# font "public/fonts/Zawgyi-One.ttf"
- # font "public/fonts/padauk.ttf"
- font_size 9
- text "#{order_item.dining}", :size => 15
+ # font "public/fonts/padauk.ttf"
+ self.header_font_size = 14
+ self.item_font_size = 12
+
+ text "#{order_item.dining}", :size => self.header_font_size,:align => :center, :left_margin => -20
stroke_horizontal_rule
move_down 5
- cashier_info(order_item.order_by,order_item.order_at, order_item.customer)
+ #order_info
+ order_info(order_item.order_by,order_item.order_at)
+ # order items
+ order_items(order_item)
end
- def cashier_info(order_by, order_at, customer)
- move_down 5
+ # Write Order Information to PDF
+ def order_info(order_by, order_at)
y_position = cursor
- bounding_box([0,y_position], :width =>200, :height => 20) do
- text "OrderBy:#{order_by} Customer:#{customer} Date:#{order_at.strftime("%Y %m %d")}", :size => 7,:align => :left
+ bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
+ text "OrderBy: #{order_by} ", :size => self.item_font_size,:align => :left
+ end
+
+ move_down 5
+ y_position = cursor
+ bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
+ text "Date: #{order_at.strftime("%Y-%m-%d %I:%M %p")}", :size => self.item_font_size,:align => :left
end
stroke_horizontal_rule
+ move_down 10
+ end
+
+ # Write Order items to PDF
+ def order_items(order_item)
+ y_position = cursor
+
+ # No Need for Order Item
+ # bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
+ # text "Item", :size => self.item_font_size,:align => :left
+ # end
+
+ # bounding_box([self.item_width,y_position], :width => self.qty_width, :height => self.item_height) do
+ # text "Qty", :size => self.item_font_size,:align => :right
+ # end
+
+ # stroke_horizontal_rule
+ # move_down 5
+
+ #Add Order Item
+ add_order_items(order_item)
+
+ dash(1, :space => 1, :phase => 1)
+ stroke_horizontal_line 0, self.page_width
move_down 5
end
+ # Add order items under order info
+ def add_order_items(order_item)
+ y_position = cursor
+
+ move_down 5
+
+ bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
+ text "#{order_item.item_name}", :size => self.item_font_size,:align => :left
+ end
+
+ bounding_box([self.item_width,y_position], :width => self.qty_width, :height => self.item_height) do
+ text "[#{order_item.qty.to_i}]", :size => self.item_font_size,:align => :left
+ end
+
+ move_down 5
+
+ end
+
end
diff --git a/app/pdf/order_summary_pdf.rb b/app/pdf/order_summary_pdf.rb
index 8b79b40e..47c1f6a5 100644
--- a/app/pdf/order_summary_pdf.rb
+++ b/app/pdf/order_summary_pdf.rb
@@ -1,17 +1,92 @@
class OrderSummaryPdf < Prawn::Document
+ attr_accessor :label_width,:price_column_width,:page_width, :page_height, :margin, :price_width, :item_width, :header_font_size, :item_font_size,:item_height,:qty_width,:total_width,:item_description_width
+ def initialize(order)
+ self.page_width = 254
+ self.page_height = 1450
+ self.margin = 10
+ self.price_width = 40 # No Need for item
+ self.qty_width = 34
+ self.total_width = 40 # No Need for item
+ self.item_width = self.page_width - (self.qty_width + (self.margin*4))
+ self.item_height = 15
+ self.item_description_width = self.page_width - (self.price_width + self.qty_width + self.total_width)
+ self.label_width=100
- def initialize(order, print_settings)
- super(:margin => [10, 5, 30, 5], :page_size => [200,400])
+ super(:margin => [self.margin, self.margin, self.margin, self.margin], :page_size => [self.page_width, self.page_height])
# font "public/fonts/#{font_name}".to_s + ".ttf".to_s
# font "public/fonts/Zawgyi-One.ttf"
# font "public/fonts/padauk.ttf"
+ self.header_font_size = 12
+ self.item_font_size = 10
-
- font_size 9
- text "#{"table_name"}", :size => 15
+ text "#{order[0].dining}", :size => self.header_font_size,:align => :center, :left_margin => -20
stroke_horizontal_rule
move_down 5
+ #order_info
+ order_info(order[0].order_by,order[0].order_at)
+
+ # order items
+ order_items(order)
+
+ end
+
+ # Write Order Information to PDF
+ def order_info(order_by, order_at)
+ y_position = cursor
+
+ bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
+ text "OrderBy: #{order_by} ", :size => self.item_font_size,:align => :left
+ end
+
+ move_down 5
+ y_position = cursor
+ bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
+ text "Date: #{order_at.strftime("%Y-%m-%d %I:%M %p")}", :size => self.item_font_size,:align => :left
+ end
+
+ stroke_horizontal_rule
+
+ move_down 10
+ end
+
+ # Write Order items to PDF
+ def order_items(order_item)
+ y_position = cursor
+
+ bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
+ text "Item", :size => self.item_font_size,:align => :left
+ end
+
+ bounding_box([self.item_width,y_position], :width => self.qty_width, :height => self.item_height) do
+ text "Qty", :size => self.item_font_size,:align => :left
+ end
+
+ stroke_horizontal_rule
+ move_down 5
+
+ #Add Order Item
+ add_order_items(order_item)
+ end
+
+ # Add order items under order info
+ def add_order_items(order_item)
+ y_position = cursor
+
+ move_down 5
+
+ order_item.each do|odi|
+ bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
+ text "#{odi.item_name}", :size => self.item_font_size,:align => :left
+ end
+
+ bounding_box([self.item_width,y_position], :width => self.qty_width, :height => self.item_height) do
+ text "#{odi.qty}", :size => self.item_font_size,:align => :left
+ end
+ end
+
+ move_down 5
+
end
end
diff --git a/app/pdf/queue_no_pdf.rb b/app/pdf/queue_no_pdf.rb
new file mode 100644
index 00000000..704dbfdb
--- /dev/null
+++ b/app/pdf/queue_no_pdf.rb
@@ -0,0 +1,58 @@
+class QueueNoPdf < Prawn::Document
+ attr_accessor :label_width,:price_column_width,:page_width, :page_height, :margin, :price_width, :item_width, :header_font_size, :item_font_size,:item_height,:qty_width,:total_width,:item_description_width
+ def initialize(printer_settings, queue)
+ self.page_width = 210
+ self.page_height = 2500
+ self.margin = 5
+ self.price_width = 35
+ self.qty_width = 20
+ self.total_width = 35
+ self.item_width = self.page_width - ((self.price_width + self.qty_width + self.total_width))
+ self.item_height = 15
+ self.item_description_width = (self.page_width-20) / 2
+ self.label_width = 100
+
+ super(:margin => [self.margin, self.margin, self.margin, self.margin], :page_size => [self.page_width, self.page_height])
+
+ self.header_font_size = 10
+ self.item_font_size = 8
+
+ header( "Beauty In the Pot", printer_settings.name)
+
+ queue_no(queue)
+ stroke_horizontal_rule
+
+ date_info(queue)
+
+ end
+
+ def header (printer_name, name)
+ text "#{printer_name}", :left_margin => -10, :size => self.header_font_size,:align => :center
+ text "#{name}", :size => self.header_font_size,:align => :center
+ # move_down self.item_height
+ move_down 5
+ stroke_horizontal_rule
+ move_down 5
+ end
+
+ def queue_no (queue)
+ move_down 5
+ text "#{queue.queue_no}", :size => 100,:align => :center
+ end
+
+ def date_info(queue)
+ move_down 5
+
+ y_position = cursor
+ bounding_box([0,y_position], :width =>self.label_width, :height => self.item_height) do
+ text "Date:", :size => self.item_font_size,:align => :left
+ end
+ bounding_box([self.label_width,y_position], :width => self.item_width) do
+ text "#{queue.created_at.strftime('%Y-%m-%d %I:%M %p')}" , :size => self.item_font_size,:align => :left
+ end
+
+ move_down 5
+
+ end
+
+end
diff --git a/app/pdf/receipt_bill_pdf.rb b/app/pdf/receipt_bill_pdf.rb
index e9ad042c..2d67989d 100644
--- a/app/pdf/receipt_bill_pdf.rb
+++ b/app/pdf/receipt_bill_pdf.rb
@@ -1,110 +1,237 @@
class ReceiptBillPdf < Prawn::Document
- attr_accessor :receipt_width,:price_column_width,:p_width, :page_height, :margin, :price_width, :item_width, :header_font_size, :item_font_size,:item_height,:qty_column_width,:item_description_width
- def initialize(printer_settings, sale_items,sale)
- self.p_width = 200
- self.page_height = 1450
- self.margin = 10
- # self.price_width = self.p_width / 2
- self.price_width=90
- self.item_width = self.p_width - self.price_width
- self.item_height = self.item_height
- self.qty_column_width = self.p_width / 2
- self.item_description_width=self.p_width - self.price_width
- self.receipt_width=130
+ attr_accessor :label_width,:price_column_width,:page_width, :page_height, :margin, :price_width, :item_width, :header_font_size, :item_font_size,:item_height,:qty_width,:total_width,:item_description_width
+ def initialize(printer_settings, sale_items, sale_data, customer_name, food_total, beverage_total, member_info = nil)
+ self.page_width = 210
+ self.page_height = 2500
+ self.margin = 5
+ self.price_width = 35
+ self.qty_width = 20
+ self.total_width = 35
+ self.item_width = self.page_width - ((self.price_width + self.qty_width + self.total_width))
+ self.item_height = 15
+ self.item_description_width = (self.page_width-20) / 2
+ self.label_width = 100
- @item_width = self.p_width.to_i / 2
- @qty_width = @item_width.to_i / 3
- @double = @qty_width * 2
- @half_qty = @qty_width / 2
+ # @item_width = self.page_width.to_i / 2
+ # @qty_width = @item_width.to_i / 3
+ # @double = @qty_width * 1.3
+ # @half_qty = @qty_width / 2
#setting page margin and width
- super(:margin => [self.margin, self.margin, self.margin, self.margin], :page_size => [self.p_width, self.page_height])
+ super(:margin => [self.margin, self.margin, self.margin, self.margin], :page_size => [self.page_width, self.page_height])
+
+ # font "public/fonts/#{font_name}".to_s + ".ttf".to_s
+ # font "public/fonts/Zawgyi-One.ttf"
+ # font "public/fonts/padauk.ttf"
self.header_font_size = 10
- self.item_font_size = 6
+ self.item_font_size = 8
- header( printer_settings.printer_name, printer_settings.name)
- stroke_horizontal_rule
- cashier_info(sale.receipt_no,sale.customer.name, sale.receipt_date)
- line_items(sale_items)
+ header( "Beauty In the Pot", printer_settings.name)
-
+ stroke_horizontal_rule
+
+ cashier_info(sale_data, customer_name)
+ line_items(sale_items, food_total, beverage_total)
+ all_total(sale_data)
+
+ if member_info != nil
+ member_info(member_info)
+ end
+
+ footer
end
def header (printer_name, name)
- text "#{printer_name}", :size => self.header_font_size,:align => :center
- move_down 5
- text "#{name}", :size => self.header_font_size,:align => :center
- # move_down self.item_height
- move_down 5
-
- stroke_horizontal_rule
+ text "#{printer_name}", :left_margin => -10, :size => self.header_font_size,:align => :center
+ move_down 5
+ text "#{name}", :size => self.header_font_size,:align => :center
+ # move_down self.item_height
+ move_down 5
+ stroke_horizontal_rule
end
- def cashier_info(receipt_no, customer, receipt_date)
- move_down 5
- move_down 2
+ def cashier_info(sale_data, customer_name)
+ move_down 7
+ # move_down 2
y_position = cursor
- bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
+ bounding_box([0,y_position], :width =>self.label_width, :height => self.item_height) do
text "Receipt No:", :size => self.item_font_size,:align => :left
end
- bounding_box([self.price_width, y_position], :width =>self.receipt_width) do
- text "#{receipt_no}" , :size => self.item_font_size, :align => :left
+ bounding_box([self.label_width, y_position], :width =>self.item_width) do
+ text "#{sale_data.receipt_no}" , :size => self.item_font_size, :align => :left
end
move_down 5
y_position = cursor
- bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
+ bounding_box([0,y_position], :width =>self.label_width, :height => self.item_height) do
text "Customer:", :size => self.item_font_size,:align => :left
end
- bounding_box([self.price_width,y_position], :width =>self.price_width) do
- text "#{customer}" , :size => self.item_font_size,:align => :left
+ bounding_box([self.label_width,y_position], :width =>self.item_width) do
+ text "#{customer_name}" , :size => self.item_font_size,:align => :left
end
move_down 5
y_position = cursor
- bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
- text "Date:", :size => self.item_font_size,:align => :left
+ bounding_box([0,y_position], :width =>self.label_width, :height => self.item_height) do
+ text "Date:", :size => self.item_font_size,:align => :left
end
- bounding_box([self.price_width,y_position], :width =>self.price_width) do
- text "#{receipt_date}" , :size => self.item_font_size,:align => :left
+ bounding_box([self.label_width,y_position], :width => self.item_width) do
+ text "#{sale_data.receipt_date.strftime('%Y-%m-%d %I:%M %p')}" , :size => self.item_font_size,:align => :left
end
- # stroke_horizontal_rule
+
+ move_down 5
+ stroke_horizontal_rule
move_down 5
end
- def line_items(sale_items)
+ def line_items(sale_items, food_total, beverage_total)
y_position = cursor
- qty_column_width = self.p_width * 0.2
- item_description_width = self.p_width * 0.5
- price_column_width = self.p_width * 0.3
-
-
- stroke_horizontal_rule
- move_down 5
- y_position = cursor
pad_top(15) {
# @item_width.to_i + @half_qty.to_i
- text_box "Items", :at =>[0,y_position], :width => @item_width.to_i - @half_qty.to_i , :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size
- text_box "Price", :at =>[@item_width.to_i - @half_qty.to_i,y_position], :width => @qty_width, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
- text_box "Qty", :at =>[@item_width.to_i-@qty_width,y_position], :width => @half_qty, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
- text_box "Discount", :at =>[@item_width.to_i + @half_qty.to_i,y_position], :width => @qty_width, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
- text_box "Total", :at =>[@item_width.to_i + @half_qty.to_i,y_position], :width => @double, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
+ text_box "Items", :at =>[0,y_position], :width => self.item_width, :height =>self.item_height, :size => self.item_font_size, :overflow => :shrink_to_fix
+ text_box "Price", :at =>[self.item_width,y_position], :width => self.price_width, :height =>self.item_height, :size => self.item_font_size, :align => :right, :overflow => :shrink_to_fix
+ text_box "Qty", :at =>[(self.item_width+self.price_width),y_position], :width => self.qty_width, :height =>self.item_height, :size => self.item_font_size, :align => :center, :overflow => :shrink_to_fix
+ text_box "Total", :at =>[(self.item_width+self.price_width),y_position], :width => self.total_width+5, :height =>self.item_height, :size => self.item_font_size, :align => :right, :overflow => :shrink_to_fix
}
move_down 5
stroke_horizontal_rule
- add_line_item_row(sale_items)
- stroke_horizontal_rule
+ add_line_item_row(sale_items, food_total, beverage_total)
end
- def add_line_item_row(sale_items)
- y_position = cursor
- move_down 5
+ def add_line_item_row(sale_items, food_total, beverage_total)
+ item_name_width = (self.item_width+self.price_width)
+ y_position = cursor
+ move_down 5
+ sub_total = 0.0
+ sale_items.each do |item|
+ sub_total += (item.qty*item.unit_price)
+ qty = item.qty
+ total_price = item.qty*item.unit_price
+ price = item.unit_price
+ product_name = item.product_name
+
+
+ y_position = cursor
+
+ pad_top(15) {
+ text_box "#{product_name}", :at =>[0,y_position], :width => self.item_width, :height =>self.item_height, :overflow => :shrink_to_fix, :size => self.item_font_size, :overflow => :shrink_to_fix
+ text_box "#{price.to_i}", :at =>[self.item_width,y_position], :width => self.price_width, :height =>self.item_height, :size => self.item_font_size, :align => :right, :overflow => :shrink_to_fix
+ text_box "#{qty.to_i}", :at =>[item_name_width,y_position], :width => self.qty_width, :height =>self.item_height, :size => self.item_font_size, :align => :center, :overflow => :shrink_to_fix
+ text_box "#{total_price.to_i}", :at =>[(item_name_width),y_position], :width =>self.total_width+5, :height =>self.item_height, :size => self.item_font_size, :align => :right, :overflow => :shrink_to_fix
+ }
+ move_down 3
+ end
+
+ stroke_horizontal_rule
+
+ move_down 5
+ y_position = cursor
+ bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do
+ text "Sub Total", :size => self.item_font_size,:align => :left
+ end
+ bounding_box([self.item_description_width,y_position], :width =>self.label_width) do
+ text "#{ sub_total }" , :size => self.item_font_size,:align => :right
+ end
+
+ # Food and Beverage
+ food_beverage_total = food_total.to_s + "/" + beverage_total.to_s
+
+ move_down 5
+
+ y_position = cursor
+ bounding_box([0,y_position], :width => self.item_description_width, :height => self.item_height) do
+ text "Food/Beverage Total", :size => self.item_font_size,:align => :left
+ end
+ bounding_box([self.item_description_width,y_position], :width => self.label_width) do
+ text "#{ food_beverage_total }" , :size => self.item_font_size,:align => :right
+ end
+ end
+
+ def all_total(sale_data)
+ item_name_width = self.item_width
+ move_down 5
+ y_position = cursor
+
+ bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do
+ text "Discount", :size => self.item_font_size,:align => :left
+ end
+ bounding_box([self.item_description_width,y_position], :width =>self.label_width) do
+ text "( " +"#{sale_data.total_discount}" +" )" , :size => self.item_font_size,:align => :right
+ end
+
+ if sale_data.sale_taxes.length > 1
+ sale_data.sale_taxes.each do |st|
+ move_down 5
+ y_position = cursor
+
+ bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do
+ text "#{ st.tax_name }", :size => self.item_font_size,:align => :left
+ end
+ bounding_box([self.item_description_width,y_position], :width =>self.label_width) do
+ text "( " +"#{ st.tax_payable_amount }" +" )" , :size => self.item_font_size,:align => :right
+ end
+ end
+ else
+
+ end
+
+ # move_down 5
+ # y_position = cursor
+
+ # bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do
+ # text "Total Tax", :size => self.item_font_size,:align => :left
+ # end
+ # bounding_box([self.item_description_width,y_position], :width =>self.label_width) do
+ # text "( " +"#{sale_data.total_tax}" +" )" , :size => self.item_font_size,:align => :right
+ # end
+
+ move_down 5
+ y_position = cursor
+ move_down 5
+ bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do
+ text "Grand Total", :size => self.item_font_size,:align => :left
+ end
+ bounding_box([self.item_description_width,y_position], :width =>self.label_width) do
+ text "#{sale_data.grand_total}" , :size => self.item_font_size,:align => :right
+ end
+ move_down 5
+ # stroke_horizontal_rule
+ end
+
+ # show member information
+ def member_info(member_info)
+
+ move_down 7
+ if member_info["status"] == true
+ member_info["data"].each do |res|
+
+ move_down 5
+ y_position = cursor
+ bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do
+ text "#{ res["accountable_type"] }", :size => self.item_font_size,:align => :left
+ end
+ bounding_box([self.item_description_width,y_position], :width =>self.label_width) do
+ text "#{ res["balance"] }" , :size => self.item_font_size,:align => :right
+ end
+
+ end
+ end
+ end
+
+ def footer
+ move_down 5
+ stroke_horizontal_rule
+ move_down 5
+
+ text "*** Thank You ***", :left_margin => -10, :size => self.header_font_size,:align => :center
+
+ move_down 5
end
end
diff --git a/app/reports/menu_report.rb b/app/reports/menu_report.rb
index ca430f0a..2a17e851 100644
--- a/app/reports/menu_report.rb
+++ b/app/reports/menu_report.rb
@@ -1,5 +1,5 @@
-class MenuReport < Compendium::Report
- query :list, collect: :active_record do |params|
- Menu.all
- end
-end
+# class MenuReport < Compendium::Report
+# query :list, collect: :active_record do |params|
+# Menu.all
+# end
+# end
diff --git a/app/views/api/bookings/show.json.jbuilder b/app/views/api/bookings/show.json.jbuilder
index c4edb79f..e1ebd5a9 100644
--- a/app/views/api/bookings/show.json.jbuilder
+++ b/app/views/api/bookings/show.json.jbuilder
@@ -1,7 +1,12 @@
if (@booking)
- json.id @booking.id
+ json.id @booking.booking_id
json.status @booking.booking_status
- json.checkin_at @booking.checkin_at
+ if Sale.exists?(@booking.sale_id)
+ json.sale_status Sale.find(@booking.sale_id).sale_status
+ else
+ json.sale_status ""
+ end
+ json.checkin_at @booking.checkin_at.strftime("%d-%m-%Y")
json.checkin_by @booking.checkin_by
json.table_name @booking.dining_facility.name
@@ -17,9 +22,9 @@ if (@booking)
order_items = []
@booking.booking_orders.each do |bo|
order = Order.find(bo.order_id)
- if (order.status == "new")
+ #if (order.status == "new")
order_items = order_items + order.order_items
- end
+ #end
end
json.order_items order_items do |item|
diff --git a/app/views/api/customers/get_customer_order.json.jbuilder b/app/views/api/customers/get_customer_order.json.jbuilder
new file mode 100644
index 00000000..f00ce173
--- /dev/null
+++ b/app/views/api/customers/get_customer_order.json.jbuilder
@@ -0,0 +1,38 @@
+if (@customer)
+ json.id @customer.customer_id
+ json.name @customer.name
+ json.email @customer.email
+ json.contact_no @customer.contact_no
+ json.date_of_birth @customer.date_of_birth
+
+
+ @total_amount = 0.00
+ @total_tax = 0.00
+
+ if @customer.orders
+ order_items = []
+ @customer.orders.each do |bo|
+ order = Order.find(bo.order_id)
+ #if (order.status == "new")
+ order_items = order_items + order.order_items
+ #end
+ end
+
+ json.order_items order_items do |item|
+ json.item_instance_code item.item_code
+ json.item_name item.item_name
+ json.price item.price
+ json.qty item.qty
+ json.options item.options
+ json.remark item.remark
+ json.item_status item.order_item_status
+ @total_amount = @total_amount + (item.price * item.qty)
+ end
+
+ end
+
+ json.sub_total @total_amount
+ json.commerical_tax @total_amount * 0.05
+ json.total @total_amount + (@total_amount * 0.05)
+
+end
\ No newline at end of file
diff --git a/app/views/crm/customers/_error_messages.html.erb b/app/views/crm/customers/_error_messages.html.erb
new file mode 100644
index 00000000..bbff284b
--- /dev/null
+++ b/app/views/crm/customers/_error_messages.html.erb
@@ -0,0 +1,9 @@
+
+
+ Select Member Group
+ <% @member_group.each do |member| %>
+ ">
+ <%= member["name"] %>
+ <%end %>
+
+
diff --git a/app/views/crm/customers/_form.html.erb b/app/views/crm/customers/_form.html.erb
index c5adac88..c913651a 100644
--- a/app/views/crm/customers/_form.html.erb
+++ b/app/views/crm/customers/_form.html.erb
@@ -1,4 +1,5 @@
-<%= simple_form_for(@crm_customer) do |f| %>
+
+<%= simple_form_for([:crm,@crm_customer]) do |f| %>
<%= f.error_notification %>
@@ -7,7 +8,6 @@
<%= f.input :contact_no %>
<%= f.input :email %>
<%= f.input :date_of_birth %>
- <%= f.association :membership %>
<%= f.input :membership_type %>
<%= f.input :membership_authentication_code %>
@@ -16,3 +16,5 @@
<%= f.button :submit %>
<% end %>
+
+
\ No newline at end of file
diff --git a/app/views/crm/customers/edit.html.erb b/app/views/crm/customers/edit.html.erb
index 62bd18eb..8541aa0d 100644
--- a/app/views/crm/customers/edit.html.erb
+++ b/app/views/crm/customers/edit.html.erb
@@ -2,5 +2,5 @@
<%= render 'form', crm_customer: @crm_customer %>
-<%= link_to 'Show', @crm_customer %> |
+<%= link_to 'Show', @crm_customers_path %> |
<%= link_to 'Back', crm_customers_path %>
diff --git a/app/views/crm/customers/index.html.erb b/app/views/crm/customers/index.html.erb
index 3df65eac..f97de091 100644
--- a/app/views/crm/customers/index.html.erb
+++ b/app/views/crm/customers/index.html.erb
@@ -1,41 +1,242 @@
-<%= notice %>
+
-Crm Customers
-
-
-
- Name
- Company
- Contact no
- Email
- Date of birth
- Membership
- Membership type
- Membership authentication code
-
-
-
+
+
+
+
+
+
+
+
-
- <% @crm_customers.each do |crm_customer| %>
-
- <%= crm_customer.name %>
- <%= crm_customer.company %>
- <%= crm_customer.contact_no %>
- <%= crm_customer.email %>
- <%= crm_customer.date_of_birth %>
- <%= crm_customer.membership %>
- <%= crm_customer.membership_type %>
- <%= crm_customer.membership_authentication_code %>
- <%= link_to 'Show', crm_customer %>
- <%= link_to 'Edit', edit_crm_customer_path(crm_customer) %>
- <%= link_to 'Destroy', crm_customer, method: :delete, data: { confirm: 'Are you sure?' } %>
-
- <% end %>
-
-
+
+
+ <%= form_tag crm_customers_path, :method => :get do %>
+
+
+ Search
+
+ <% end %>
+
+
+
+ Select
+ Name
+ Company
+ Contact no
+ Email
+
+
-
+
+ <% if @crm_customers.count > 0 %>
+ <% @crm_customers.each do |crm_customer| %>
+ <% if crm_customer.customer_id != "CUS-000000000001" && crm_customer.customer_id != "CUS-000000000002" %>
+
+
+
+ <%= crm_customer.name %>
+ <%= crm_customer.company rescue '-' %>
+ <%= crm_customer.contact_no %>
+ <%= crm_customer.email %>
+ <%= link_to 'Show', crm_customer_path(crm_customer) %>
+
+
+ <% end %>
+ <% end %>
+ <%else%>
+ There are no record for your search
+ <% end %>
+
+
+
+
+ <%= paginate @crm_customers %>
+
+
-<%= link_to 'New Crm Customer', new_crm_customer_path %>
+
+
+
+ <%= simple_form_for @crm_customer,:url => crm_customers_path, :method => :post do |f| %>
+
+
+ <%= f.hidden_field :id, :class => "form-control col-md-6 " %>
+
+
">
+ <%= f.input :name, :class => "form-control col-md-6 name" %>
+ <% flash.each do |name, msg| %>
+ <%= msg['name'] %>
+ <% end -%>
+
+
+
+ <%= f.input :company, :class => "form-control col-md-6 company" %>
+
+
">
+ <%= f.input :contact_no, :class => "form-control col-md-6 contact_no" %>
+ <% flash.each do |name, msg| %>
+ <%= msg['contact_no'] %>
+ <% end -%>
+
+
+
">
+ <%= f.input :email, :class => "form-control col-md-6 email" %>
+
+ <% flash.each do |name, msg| %>
+ <%= msg['email'] %>
+ <% end -%>
+
+
+
+ Date Of Birth
+ <%= f.text_field :date_of_birth,:value=>"01-01-1990",:class=>"form-control datepicker"%>
+
+
+
+ Select Member Group
+
+ <% Lookup.where("lookup_type = ?", "member_group_type" ).each do |member| %>
+
+ <%= member.name %>
+ <%end %>
+
+
+
+
+
+
+ <%= f.button :submit, "Submit",:class => 'btn btn-primary ', :id => 'submit_customer' %>
+ <%= f.button :submit, "Update",:class => 'btn btn-primary ', :disabled =>'', :id => 'update_customer' %>
+ <%= f.button :button, "Reset",:class => 'btn btn-danger ', :id => 'reset' %>
+
+ <%end%>
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/views/crm/customers/show.html.erb b/app/views/crm/customers/show.html.erb
index 30341a00..d806ec34 100644
--- a/app/views/crm/customers/show.html.erb
+++ b/app/views/crm/customers/show.html.erb
@@ -1,44 +1,163 @@
-<%= notice %>
+
+
+
-
- Name:
- <%= @crm_customer.name %>
-
+
+
+
-
- Company:
- <%= @crm_customer.company %>
-
+
-
- Contact no:
- <%= @crm_customer.contact_no %>
-
+
+
+
+
+
+
Customer Profile
+
+
+
+
+ Name
+ <%= @crm_customer.name %>
+
+
+ Email
+ <%= @crm_customer.email %>
+
+
+ Contact no
+ <%= @crm_customer.contact_no %>
+
+
+ Company
+ <%= @crm_customer.company %>
+
+
+ Date Of Birth
+ <%= @crm_customer.date_of_birth %>
+
+
+
+
+
+
+
+
+
+
+
Membership Detail
+
+
+
+ <% if @membership == 0 %>
+
+ "There is no membership data"
+
+ <% else %>
+ <% @membership.each do |member| %>
+
+ <%= member["accountable_type"] %>
+ <%= member["balance"] %>
+
+ <% end %>
+
+ <% end %>
+
+
+
+
+
+
-
- Email:
- <%= @crm_customer.email %>
-
+
+
Order Details
+
+
+
+
+ Order ID
+ Menu Item
+ QTY
+ Unit Price
+ Option
+ Status
+ Waiter
+ Created at
+
+
-
- Date of birth:
- <%= @crm_customer.date_of_birth %>
-
+
+ <% @order_items.each do |order_item| %>
+
+ <%= order_item.order_id %>
+ <%= order_item.item_name %>
+ <%= order_item.qty %>
+ <%= order_item.price %>
+ <%= order_item.options %>
+ <%= order_item.order_item_status %>
+ <%= order_item.item_order_by %>
+ <%= order_item.created_at.strftime("%d-%m-%y") %>
+
+ <% end %>
+
+
+
+
-
- Membership:
- <%= @crm_customer.membership %>
-
+
+
Sale Details
+
+
+
+
+ Sale ID
+ Menu Item
+ QTY
+ Unit Price
+ Tax Price
+ Created At
+
+
-
- Membership type:
- <%= @crm_customer.membership_type %>
-
+
+ <% @sale_items.each do |sale_item| %>
+
+ <%= sale_item.sale_id %>
+ <%= sale_item.product_name %>
+ <%= sale_item.qty %>
+ <%= sale_item.unit_price %>
+
+ <%= sale_item.taxable_price %>
+ <%= sale_item.created_at %>
+
+ <% end %>
+
+
+
+
+
+
+
+
+
+
+
+
-
- Membership authentication code:
- <%= @crm_customer.membership_authentication_code %>
-
-<%= link_to 'Edit', edit_crm_customer_path(@crm_customer) %> |
-<%= link_to 'Back', crm_customers_path %>
diff --git a/app/views/crm/customers/show.json.jbuilder b/app/views/crm/customers/show.json.jbuilder
index 24d20eca..bd9680de 100644
--- a/app/views/crm/customers/show.json.jbuilder
+++ b/app/views/crm/customers/show.json.jbuilder
@@ -1 +1,2 @@
-json.partial! "crm_customers/crm_customer", crm_customer: @crm_customer
+json.extract! @crm_customer, :id, :name, :company, :contact_no, :email, :date_of_birth, :membership_id, :membership_type, :membership_authentication_code, :created_at, :updated_at
+json.url crm_customer_url(@crm_customer, format: :json)
diff --git a/app/views/crm/customers/showbackup.html.erb b/app/views/crm/customers/showbackup.html.erb
new file mode 100644
index 00000000..936192cf
--- /dev/null
+++ b/app/views/crm/customers/showbackup.html.erb
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Name
+ Email
+ Contact no
+ Company
+ Date Of Birth
+ Membership Account
+
+
+
+
+
+ <%= @crm_customer.name %>
+ <%= @crm_customer.email %>
+ <%= @crm_customer.contact_no %>
+ <%= @crm_customer.company %>
+ <%= @crm_customer.date_of_birth %>
+
+
+
+
+
+
+
Sale Items
+
+
+
+
+ Sale ID
+ Menu Item
+ QTY
+ Unit Price
+ Tax Price
+ Created At
+
+
+
+
+ <% @sale_items.each do |sale_item| %>
+
+ <%= sale_item.sale_id %>
+ <%= sale_item.product_name %>
+ <%= sale_item.qty %>
+ <%= sale_item.unit_price %>
+
+ <%= sale_item.taxable_price %>
+ <%= sale_item.created_at %>
+
+ <% end %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/views/crm/dining_queues/_crm_dining_queue.json.jbuilder b/app/views/crm/dining_queues/_crm_dining_queue.json.jbuilder
new file mode 100644
index 00000000..f2580e52
--- /dev/null
+++ b/app/views/crm/dining_queues/_crm_dining_queue.json.jbuilder
@@ -0,0 +1,2 @@
+json.extract! crm_dining_queue, :id, :name, :contact, :queue_no, :created_at, :updated_at
+json.url crm_dining_queue_url(crm_dining_queue, format: :json)
diff --git a/app/views/crm/dining_queues/_form.html.erb b/app/views/crm/dining_queues/_form.html.erb
new file mode 100644
index 00000000..7f02ac15
--- /dev/null
+++ b/app/views/crm/dining_queues/_form.html.erb
@@ -0,0 +1,25 @@
+
+<%= simple_form_for([:crm,@dining_queue]) do |f| %>
+ <%= f.error_notification %>
+ <%= @queue_no %>
+
+ <%= f.input :name %>
+ <%= f.input :contact_no %>
+ <%= f.input :queue_no , :class => "dining",:id => "dining", :readonly => true%>
+
+
+
+
+ <%= f.button :submit %>
+
+<% end %>
+
+
+
diff --git a/app/views/crm/dining_queues/edit.html.erb b/app/views/crm/dining_queues/edit.html.erb
new file mode 100644
index 00000000..e5ca3b9f
--- /dev/null
+++ b/app/views/crm/dining_queues/edit.html.erb
@@ -0,0 +1,11 @@
+
+
+
+ <%= render 'form', dining_queue: @dining_queue %>
+
diff --git a/app/views/crm/dining_queues/index.html.erb b/app/views/crm/dining_queues/index.html.erb
new file mode 100644
index 00000000..e7834b98
--- /dev/null
+++ b/app/views/crm/dining_queues/index.html.erb
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+ Name
+ Contact No
+ Queue No
+ Action
+
+
+
+
+ <% @dining_queues.each do |dining_queue| %>
+
+ <%= dining_queue.name %>
+ <%= dining_queue.contact_no %>
+ <%= dining_queue.queue_no %>
+
+ <%= link_to 'Edit', edit_crm_dining_queue_path(dining_queue) %> | <%= link_to 'Destroy', crm_dining_queue_path(dining_queue), method: :delete, data: { confirm: 'Are you sure?' } %>
+
+ <% end %>
+
+
+
+
diff --git a/app/views/crm/dining_queues/index.json.jbuilder b/app/views/crm/dining_queues/index.json.jbuilder
new file mode 100644
index 00000000..979087b7
--- /dev/null
+++ b/app/views/crm/dining_queues/index.json.jbuilder
@@ -0,0 +1 @@
+json.array! @crm_dining_queues, partial: 'crm_dining_queues/crm_dining_queue', as: :crm_dining_queue
diff --git a/app/views/crm/dining_queues/new.html.erb b/app/views/crm/dining_queues/new.html.erb
new file mode 100644
index 00000000..280a59b2
--- /dev/null
+++ b/app/views/crm/dining_queues/new.html.erb
@@ -0,0 +1,11 @@
+
+
+
+ <%= render 'form', dining_queue: @dining_queue %>
+
\ No newline at end of file
diff --git a/app/views/crm/dining_queues/show.html.erb b/app/views/crm/dining_queues/show.html.erb
new file mode 100644
index 00000000..5e52a611
--- /dev/null
+++ b/app/views/crm/dining_queues/show.html.erb
@@ -0,0 +1,19 @@
+<%= notice %>
+
+
+ Name:
+ <%= @crm_dining_queue.name %>
+
+
+
+ Contact:
+ <%= @crm_dining_queue.contact %>
+
+
+
+ Queue no:
+ <%= @crm_dining_queue.queue_no %>
+
+
+<%= link_to 'Edit', edit_crm_dining_queue_path(@crm_dining_queue) %> |
+<%= link_to 'Back', crm_dining_queues_path %>
diff --git a/app/views/crm/dining_queues/show.json.jbuilder b/app/views/crm/dining_queues/show.json.jbuilder
new file mode 100644
index 00000000..83c09bea
--- /dev/null
+++ b/app/views/crm/dining_queues/show.json.jbuilder
@@ -0,0 +1 @@
+json.partial! "crm_dining_queues/crm_dining_queue", crm_dining_queue: @crm_dining_queue
diff --git a/app/views/crm/home/_booking.html.erb b/app/views/crm/home/_booking.html.erb
index b8d2ba50..fbe837a7 100644
--- a/app/views/crm/home/_booking.html.erb
+++ b/app/views/crm/home/_booking.html.erb
@@ -6,28 +6,29 @@
<% @booking.each do |booking| %>
<% if booking.booking_status == "new" %>
-
-
- <%= @i += 1 %> . <%= booking.dining_facility.name %>
- - <%= booking.id %>
-
-
-
-
- Order at <%= booking.checkin_at.strftime("%H,%m") %>, <%= booking.checkin_by %>
-
-
-
-