From 937f40e7c18da63e10349b5c3fd3630f3bee7379 Mon Sep 17 00:00:00 2001 From: Thein Lin Kyaw Date: Mon, 2 Dec 2019 17:19:28 +0630 Subject: [PATCH 01/17] Single database for multiple shops Use ActsAsTenant as Multi-tenancy for shops See below files: - app/controllers/concern/multi_tenancy.rb - app/models/application_record.rb - app/models/shop.rb An initializer can be created to control option in ActsAsTenant. config/initializers/acts_as_tenant.rb require 'acts_as_tenant/sidekiq' ActsAsTenant.configure do |config| config.require_tenant = false # true end more details: https://github.com/ErwinM/acts_as_tenant --- Gemfile | 3 +++ Gemfile.lock | 8 ++++++-- app/controllers/api/api_controller.rb | 2 +- app/controllers/api/bill_controller.rb | 2 +- .../api/call_waiters_controller.rb | 2 +- .../order_reservation_controller.rb | 2 +- app/controllers/api/orders_controller.rb | 2 +- .../api/payment/mobilepayment_controller.rb | 2 +- .../api/sound_effect_controller.rb | 2 +- app/controllers/application_controller.rb | 2 +- app/controllers/base_controller.rb | 3 ++- app/controllers/base_crm_controller.rb | 2 +- app/controllers/base_inventory_controller.rb | 2 +- app/controllers/base_oqs_controller.rb | 2 +- app/controllers/base_origami_controller.rb | 2 +- app/controllers/base_report_controller.rb | 4 ++-- app/controllers/base_waiter_controller.rb | 2 +- .../concerns/login_verification.rb | 12 +++++------ app/controllers/concerns/multi_tenancy.rb | 20 +++++++++++++++++++ app/controllers/crm/customers_controller.rb | 2 +- app/controllers/home_controller.rb | 2 +- .../inventory/inventory_controller.rb | 2 +- .../inventory_definitions_controller.rb | 2 +- .../inventory/stock_check_items_controller.rb | 2 +- .../inventory/stock_checks_controller.rb | 4 ++-- .../inventory/stock_journals_controller.rb | 2 +- app/controllers/oqs/edit_controller.rb | 2 +- app/controllers/origami/alipay_controller.rb | 6 +++--- .../origami/credit_payments_controller.rb | 4 ++-- .../origami/credit_sales_controller.rb | 12 +++++------ .../origami/customers_controller.rb | 2 +- .../origami/dashboard_controller.rb | 2 +- app/controllers/origami/dinga_controller.rb | 4 ++-- .../origami/gift_voucher_controller.rb | 6 +++--- app/controllers/origami/home_controller.rb | 16 +++++++-------- app/controllers/origami/jcb_controller.rb | 6 +++--- .../origami/junction_pay_controller.rb | 4 ++-- app/controllers/origami/master_controller.rb | 6 +++--- .../origami/movetable_controller.rb | 2 +- app/controllers/origami/mpu_controller.rb | 6 +++--- .../origami/order_reservation_controller.rb | 2 +- app/controllers/origami/orders_controller.rb | 4 ++-- app/controllers/origami/paymal_controller.rb | 4 ++-- .../origami/payments_controller.rb | 8 ++++---- .../origami/paypar_payments_controller.rb | 2 +- .../origami/redeem_payments_controller.rb | 2 +- .../origami/request_bills_controller.rb | 2 +- app/controllers/origami/rooms_controller.rb | 10 +++++----- app/controllers/origami/sales_controller.rb | 4 ++-- .../origami/second_display_controller.rb | 2 +- .../origami/split_bill_controller.rb | 2 +- .../origami/table_invoices_controller.rb | 4 ++-- .../origami/unionpay_controller.rb | 6 +++--- app/controllers/origami/visa_controller.rb | 6 +++--- app/controllers/origami/void_controller.rb | 2 +- app/controllers/origami/voucher_controller.rb | 2 +- .../origami/waste_spoile_controller.rb | 2 +- .../reports/product_sale_controller.rb | 2 +- .../reports/receipt_no_controller.rb | 2 +- app/controllers/settings/shops_controller.rb | 4 ++-- .../transactions/sales_controller.rb | 2 +- app/models/application_record.rb | 11 ++++++++++ app/models/kbz_pay.rb | 14 ++++++------- app/models/menu.rb | 2 +- app/models/order_queue_station.rb | 2 +- app/models/order_reservation.rb | 10 +++++----- app/models/printer/order_queue_printer.rb | 6 +++--- app/models/room.rb | 1 - app/models/sale.rb | 14 ++++++------- app/models/shop.rb | 10 +++++++--- app/uploaders/commissioner_image_uploader.rb | 12 +++++------ app/uploaders/customer_image_uploader.rb | 12 +++++------ app/uploaders/employee_image_uploader.rb | 12 +++++------ app/uploaders/menu_item_image_uploader.rb | 12 +++++------ app/uploaders/product_image_uploader.rb | 8 ++++---- app/uploaders/shop_image_uploader.rb | 12 +++++------ .../origami/dashboard/_menu.json.jbuilder | 2 +- lib/tasks/receipt.rake | 4 ++-- 78 files changed, 215 insertions(+), 173 deletions(-) create mode 100644 app/controllers/concerns/multi_tenancy.rb diff --git a/Gemfile b/Gemfile index e0d9e933..ba568b94 100644 --- a/Gemfile +++ b/Gemfile @@ -41,6 +41,9 @@ gem 'material_icons' gem 'font-awesome-rails', '~> 4.7', '>= 4.7.0.2' gem 'rack-cors' +# Multi-tenancy for shops +gem 'acts_as_tenant' + # image upload gem 'carrierwave', '~> 1.0' gem 'mini_magick' diff --git a/Gemfile.lock b/Gemfile.lock index 633b5965..bbcc1085 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -46,6 +46,9 @@ GEM i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) + acts_as_tenant (0.4.4) + rails (>= 4.0) + request_store (>= 1.0.5) aescrypt (1.0.0) airbrussh (1.4.0) sshkit (>= 1.6.1, != 1.7.0) @@ -219,6 +222,8 @@ GEM rb-inotify (0.10.0) ffi (~> 1.0) redis (3.3.5) + request_store (1.4.1) + rack (>= 1.4) roo (1.13.2) nokogiri rubyzip @@ -315,6 +320,7 @@ PLATFORMS ruby DEPENDENCIES + acts_as_tenant aescrypt axlsx (= 2.0.1) axlsx_rails @@ -374,10 +380,8 @@ DEPENDENCIES web-console (>= 3.3.0) whenever - RUBY VERSION ruby 2.4.1p111 - BUNDLED WITH 2.0.2 diff --git a/app/controllers/api/api_controller.rb b/app/controllers/api/api_controller.rb index 0e8ea909..8a84cfa1 100755 --- a/app/controllers/api/api_controller.rb +++ b/app/controllers/api/api_controller.rb @@ -1,5 +1,5 @@ class Api::ApiController < ActionController::API - include TokenVerification + include TokenVerification, MultiTenancy include ActionController::MimeResponds # before_action :lookup_domain diff --git a/app/controllers/api/bill_controller.rb b/app/controllers/api/bill_controller.rb index 7a00666a..77fc9204 100755 --- a/app/controllers/api/bill_controller.rb +++ b/app/controllers/api/bill_controller.rb @@ -106,7 +106,7 @@ class Api::BillController < Api::ApiController # unique_code = "ReceiptBillPdf" # #shop detail - # shop_details = Shop.find(1) + # shop_details = Shop.current_shop # customer= Customer.find(@sale_data.customer_id) # # get member information diff --git a/app/controllers/api/call_waiters_controller.rb b/app/controllers/api/call_waiters_controller.rb index 066fa30c..5beba9a6 100644 --- a/app/controllers/api/call_waiters_controller.rb +++ b/app/controllers/api/call_waiters_controller.rb @@ -23,7 +23,7 @@ class Api::CallWaitersController < ActionController::API end ActionCable.server.broadcast "call_waiter_channel",table: @table,time:@time,from: from, shift_ids: shift_ids # get printer info - @shop = Shop.first + @shop = Shop.current_shop unique_code = "CallWaiterPdf" print_settings = PrintSetting.find_by_unique_code(unique_code) printer = Printer::ReceiptPrinter.new(print_settings) diff --git a/app/controllers/api/order_reserve/order_reservation_controller.rb b/app/controllers/api/order_reserve/order_reservation_controller.rb index 32c2192e..cfec740d 100644 --- a/app/controllers/api/order_reserve/order_reservation_controller.rb +++ b/app/controllers/api/order_reserve/order_reservation_controller.rb @@ -70,7 +70,7 @@ class Api::OrderReserve::OrderReservationController < Api::ApiController order_reservation_id, flag = OrderReservation.addOrderReservationInfo(order_reservation) if !order_reservation_id.nil? && flag - shop = Shop.find_by_id(1) + shop = Shop.current_shop if !shop.nil? shop_code = shop.shop_code order_audio = DisplayImage.find_by_shop_id_and_name(shop.id, "order_audio") diff --git a/app/controllers/api/orders_controller.rb b/app/controllers/api/orders_controller.rb index bd2c3e18..a1e9ad9e 100755 --- a/app/controllers/api/orders_controller.rb +++ b/app/controllers/api/orders_controller.rb @@ -46,7 +46,7 @@ class Api::OrdersController < Api::ApiController @tax_profile = TaxProfile.where("lower(group_type)='cashier'") # end - @shop = Shop.first + @shop = Shop.current_shop puts "Hello world" puts @shop.to_json return @shop.to_json diff --git a/app/controllers/api/payment/mobilepayment_controller.rb b/app/controllers/api/payment/mobilepayment_controller.rb index 220cbbeb..53daa790 100644 --- a/app/controllers/api/payment/mobilepayment_controller.rb +++ b/app/controllers/api/payment/mobilepayment_controller.rb @@ -14,7 +14,7 @@ class Api::Payment::MobilepaymentController < Api::ApiController saleObj = Sale.find(sale_id) sale_items = SaleItem.get_all_sale_items(sale_id) - shop_detail = Shop.first + shop_detail = Shop.current_shop # rounding adjustment if !path.include? ("credit_payment") diff --git a/app/controllers/api/sound_effect_controller.rb b/app/controllers/api/sound_effect_controller.rb index 97dc3db5..f3126ca2 100644 --- a/app/controllers/api/sound_effect_controller.rb +++ b/app/controllers/api/sound_effect_controller.rb @@ -2,7 +2,7 @@ class Api::SoundEffectController < Api::ApiController #sound effect / alarm api for doemal side calling def sound_effect - shop = Shop.find_by_id(1) + shop = Shop.current_shop if !shop.nil? shop_code = shop.shop_code order_audio = DisplayImage.find_by_shop_id_and_name(shop.id, "order_audio") diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 66f20c55..81b4835d 100755 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,5 +1,5 @@ class ApplicationController < ActionController::Base - include LoginVerification + include LoginVerification, MultiTenancy #before_action :check_installation protect_from_forgery with: :exception diff --git a/app/controllers/base_controller.rb b/app/controllers/base_controller.rb index 1bf5b4d4..1bb0421e 100755 --- a/app/controllers/base_controller.rb +++ b/app/controllers/base_controller.rb @@ -1,5 +1,6 @@ class BaseController < ActionController::Base + include MultiTenancy layout "installation" protect_from_forgery with: :exception - + end diff --git a/app/controllers/base_crm_controller.rb b/app/controllers/base_crm_controller.rb index 00b5cf98..08bc8138 100755 --- a/app/controllers/base_crm_controller.rb +++ b/app/controllers/base_crm_controller.rb @@ -1,5 +1,5 @@ class BaseCrmController < ActionController::Base - include LoginVerification + include LoginVerification, layout "CRM" before_action :check_user diff --git a/app/controllers/base_inventory_controller.rb b/app/controllers/base_inventory_controller.rb index 8ee82777..bd455c33 100755 --- a/app/controllers/base_inventory_controller.rb +++ b/app/controllers/base_inventory_controller.rb @@ -1,5 +1,5 @@ class BaseInventoryController < ActionController::Base - include LoginVerification + include LoginVerification, MultiTenancy layout "inventory" before_action :check_user diff --git a/app/controllers/base_oqs_controller.rb b/app/controllers/base_oqs_controller.rb index 9b337b69..6e6a9c0f 100755 --- a/app/controllers/base_oqs_controller.rb +++ b/app/controllers/base_oqs_controller.rb @@ -1,5 +1,5 @@ class BaseOqsController < ActionController::Base - include LoginVerification + include LoginVerification, MultiTenancy layout "OQS" before_action :check_user diff --git a/app/controllers/base_origami_controller.rb b/app/controllers/base_origami_controller.rb index 6940a129..e9cddf05 100755 --- a/app/controllers/base_origami_controller.rb +++ b/app/controllers/base_origami_controller.rb @@ -1,5 +1,5 @@ class BaseOrigamiController < ActionController::Base - include LoginVerification + include LoginVerification, MultiTenancy layout "origami" before_action :check_user diff --git a/app/controllers/base_report_controller.rb b/app/controllers/base_report_controller.rb index 691ece34..b3d1d23a 100755 --- a/app/controllers/base_report_controller.rb +++ b/app/controllers/base_report_controller.rb @@ -1,5 +1,5 @@ class BaseReportController < ActionController::Base - include LoginVerification + include LoginVerification, MultiTenancy layout "application" before_action :check_user @@ -69,7 +69,7 @@ class BaseReportController < ActionController::Base from = from.beginning_of_day to = to.end_of_day - + return from, to end diff --git a/app/controllers/base_waiter_controller.rb b/app/controllers/base_waiter_controller.rb index 580de0f9..b1d2056c 100755 --- a/app/controllers/base_waiter_controller.rb +++ b/app/controllers/base_waiter_controller.rb @@ -1,5 +1,5 @@ class BaseWaiterController < ActionController::Base - include LoginVerification + include LoginVerification, MultiTenancy layout "waiter" before_action :check_user diff --git a/app/controllers/concerns/login_verification.rb b/app/controllers/concerns/login_verification.rb index 8eb719cb..b1102171 100755 --- a/app/controllers/concerns/login_verification.rb +++ b/app/controllers/concerns/login_verification.rb @@ -3,7 +3,7 @@ module LoginVerification included do before_action :authenticate_session_token - helper_method :current_company,:current_shop, :current_login_employee, :current_user, :get_cashier, :order_reservation, :bank_integration, :shop_detail + helper_method :current_company, :current_shop, :current_login_employee, :current_user, :get_cashier, :order_reservation, :bank_integration, :shop_detail end #this is base api base controller to need to inherit. @@ -19,7 +19,7 @@ module LoginVerification def current_shop begin - return Shop.first + return Shop.current_shop rescue return nil end @@ -41,7 +41,7 @@ module LoginVerification #Shop Name in Navbor def shop_detail - @shop = Shop.first + @shop = current_shop end #check order reservation used @@ -78,11 +78,11 @@ module LoginVerification protected # Authenticate the user with token based authentication - def authenticate - authenticate_session_token || render_unauthorized + def authenticate + authenticate_session_token || render_unauthorized end - def authenticate_session_token + def authenticate_session_token token = session[:session_token] if (token) #@current_user = User.find_by(api_key: token) diff --git a/app/controllers/concerns/multi_tenancy.rb b/app/controllers/concerns/multi_tenancy.rb new file mode 100644 index 00000000..5009e094 --- /dev/null +++ b/app/controllers/concerns/multi_tenancy.rb @@ -0,0 +1,20 @@ +module MultiTenancy + extend ActiveSupport::Concern + + included do + set_current_tenant_through_filter if respond_to? :set_current_tenant_through_filter + before_action :find_shop_by_subdomain_or_frist if respond_to? :before_action + helper_method :current_shop if respond_to? :helper_method + end + + private + def find_shop_by_subdomain_or_frist + if request.subdomain.present? + shop_code = request.subdomain.partition('-').last + shop = Shop.find_by(shop_code: shop_code) + else + shop = Shop.first + end + set_current_tenant(shop) + end +end diff --git a/app/controllers/crm/customers_controller.rb b/app/controllers/crm/customers_controller.rb index 2f846601..023b453c 100644 --- a/app/controllers/crm/customers_controller.rb +++ b/app/controllers/crm/customers_controller.rb @@ -82,7 +82,7 @@ class Crm::CustomersController < BaseCrmController @membership_types = Lookup.collection_of("member_group_type") # @taxes = TaxProfile.where(:group_type => 'cashier') - @taxes = TaxProfile.unscoped.select("id, (CONCAT(name,'(',(SELECT name FROM lookups WHERE lookup_type='tax_profiles' AND value=group_type),')')) as name") + @taxes = TaxProfile.unscope(:order).select("id, (CONCAT(name,'(',(SELECT name FROM lookups WHERE lookup_type='tax_profiles' AND value=group_type),')')) as name") .order("group_type ASC,order_by ASC") @filter = filter diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index a82a6483..18928fc3 100755 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -91,7 +91,7 @@ class HomeController < ApplicationController def dashboard @from, @to = get_date_range_from_params - @shop = Shop.first + @shop = Shop.current_shop @orders = Sale.receipt_date_between(@from, @to).where("payment_status = 'new' and sale_status = 'bill'") @sales = Sale.receipt_date_between(@from, @to).completed diff --git a/app/controllers/inventory/inventory_controller.rb b/app/controllers/inventory/inventory_controller.rb index a0324b15..d91e4176 100755 --- a/app/controllers/inventory/inventory_controller.rb +++ b/app/controllers/inventory/inventory_controller.rb @@ -26,6 +26,6 @@ class Inventory::InventoryController < BaseInventoryController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/inventory/inventory_definitions_controller.rb b/app/controllers/inventory/inventory_definitions_controller.rb index 01ca52b3..fca0bb07 100755 --- a/app/controllers/inventory/inventory_definitions_controller.rb +++ b/app/controllers/inventory/inventory_definitions_controller.rb @@ -106,7 +106,7 @@ class Inventory::InventoryDefinitionsController < BaseInventoryController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end private diff --git a/app/controllers/inventory/stock_check_items_controller.rb b/app/controllers/inventory/stock_check_items_controller.rb index 7a37f789..98fb0116 100755 --- a/app/controllers/inventory/stock_check_items_controller.rb +++ b/app/controllers/inventory/stock_check_items_controller.rb @@ -64,7 +64,7 @@ class Inventory::StockCheckItemsController < BaseInventoryController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end private diff --git a/app/controllers/inventory/stock_checks_controller.rb b/app/controllers/inventory/stock_checks_controller.rb index b7f7369d..05f7c70f 100755 --- a/app/controllers/inventory/stock_checks_controller.rb +++ b/app/controllers/inventory/stock_checks_controller.rb @@ -41,7 +41,7 @@ class Inventory::StockChecksController < BaseInventoryController member_info = nil unique_code = 'StockCheckPdf' - shop_details = current_shop + shop_details = Shop.current_shop checker = Employee.find(stockcheck.check_by) print_settings = PrintSetting.find_by_unique_code(unique_code) if !print_settings.nil? @@ -66,7 +66,7 @@ class Inventory::StockChecksController < BaseInventoryController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = current_shop + @shop = Shop.current_shop end # before_action :set_stock_check, only: [:show, :edit, :update, :destroy] diff --git a/app/controllers/inventory/stock_journals_controller.rb b/app/controllers/inventory/stock_journals_controller.rb index 11db2efd..9a737da0 100755 --- a/app/controllers/inventory/stock_journals_controller.rb +++ b/app/controllers/inventory/stock_journals_controller.rb @@ -64,7 +64,7 @@ class StockJournalsController < ApplicationController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end private diff --git a/app/controllers/oqs/edit_controller.rb b/app/controllers/oqs/edit_controller.rb index c6e130ec..e2499fbb 100644 --- a/app/controllers/oqs/edit_controller.rb +++ b/app/controllers/oqs/edit_controller.rb @@ -85,6 +85,6 @@ class Oqs::EditController < BaseOqsController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/alipay_controller.rb b/app/controllers/origami/alipay_controller.rb index 8c5f4884..3578724f 100644 --- a/app/controllers/origami/alipay_controller.rb +++ b/app/controllers/origami/alipay_controller.rb @@ -11,7 +11,7 @@ class Origami::AlipayController < BaseOrigamiController end total = 0 @alipaycount = 0 - @shop = Shop.first + @shop = Shop.current_shop @rounding_adj = 0 @can_alipay = 0 @member_discount = 0 @@ -64,7 +64,7 @@ class Origami::AlipayController < BaseOrigamiController ref_no = params[:ref_no] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj @@ -88,6 +88,6 @@ class Origami::AlipayController < BaseOrigamiController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/credit_payments_controller.rb b/app/controllers/origami/credit_payments_controller.rb index 05faf4f7..3e9f2bd3 100755 --- a/app/controllers/origami/credit_payments_controller.rb +++ b/app/controllers/origami/credit_payments_controller.rb @@ -9,7 +9,7 @@ class Origami::CreditPaymentsController < BaseOrigamiController @creditcount = 0 others = 0 - @shop = Shop.first + @shop = Shop.current_shop if @shop.is_rounding_adj new_total = Sale.get_rounding_adjustment(sale_data.grand_total) else @@ -32,7 +32,7 @@ class Origami::CreditPaymentsController < BaseOrigamiController sale_id = params[:sale_id] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj diff --git a/app/controllers/origami/credit_sales_controller.rb b/app/controllers/origami/credit_sales_controller.rb index 8f43edda..587b22dd 100644 --- a/app/controllers/origami/credit_sales_controller.rb +++ b/app/controllers/origami/credit_sales_controller.rb @@ -3,11 +3,11 @@ class Origami::CreditSalesController < BaseOrigamiController @cashier_type = 'cashier' @webview = false if check_mobile - @webview = true + @webview = true end - - @tables = Table.unscoped.all.active.order('status desc') - @rooms = Room.unscoped.all.active.order('status desc') + + @tables = Table.unscope(:order).all.active.order('status desc') + @rooms = Room.unscope(:order).all.active.order('status desc') @complete = Sale.where("DATE_FORMAT(created_at,'%Y-%m-%d') = ? and sale_status != 'new'",DateTime.now.strftime('%Y-%m-%d')) @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @customers = Customer.pluck("customer_id, name") @@ -15,7 +15,7 @@ class Origami::CreditSalesController < BaseOrigamiController @sale = Sale.find_by_sale_id(params[:sale_id]) @sale_payment = SalePayment.select("SUM(payment_amount) as payment_amount") .where("sale_id = ? and payment_method=?", @sale.sale_id, "creditnote") - + @sale_taxes = [] sale_taxes = SaleTax.where("sale_id = ?", @sale.sale_id) if !sale_taxes.empty? @@ -24,5 +24,5 @@ class Origami::CreditSalesController < BaseOrigamiController end end end - + end diff --git a/app/controllers/origami/customers_controller.rb b/app/controllers/origami/customers_controller.rb index 97f35339..b77137a9 100644 --- a/app/controllers/origami/customers_controller.rb +++ b/app/controllers/origami/customers_controller.rb @@ -87,7 +87,7 @@ class Origami::CustomersController < BaseOrigamiController @count_customer = Customer.count_customer # @taxes = TaxProfile.where(:group_type => 'cashier') - @taxes = TaxProfile.unscoped.select("id, (CONCAT(name,'(',(SELECT name FROM lookups WHERE lookup_type='tax_profiles' AND value=group_type),')')) as name") + @taxes = TaxProfile.unscope(:order).select("id, (CONCAT(name,'(',(SELECT name FROM lookups WHERE lookup_type='tax_profiles' AND value=group_type),')')) as name") .order("group_type ASC,order_by ASC") # if flash["errors"] # @crm_customer.valid? diff --git a/app/controllers/origami/dashboard_controller.rb b/app/controllers/origami/dashboard_controller.rb index 43c79179..4ff6e8b3 100644 --- a/app/controllers/origami/dashboard_controller.rb +++ b/app/controllers/origami/dashboard_controller.rb @@ -1,7 +1,7 @@ class Origami::DashboardController < BaseOrigamiController def index - @shop = Shop.first + @shop = Shop.current_shop @display_type = Lookup.find_by_lookup_type("display_type") @sale_data = Array.new diff --git a/app/controllers/origami/dinga_controller.rb b/app/controllers/origami/dinga_controller.rb index 01e35004..9754b81d 100644 --- a/app/controllers/origami/dinga_controller.rb +++ b/app/controllers/origami/dinga_controller.rb @@ -6,7 +6,7 @@ class Origami::DingaController < BaseOrigamiController @membership_rebate_balance=0 @sale_data = Sale.find_by_sale_id(@sale_id) @receipt_no = @sale_data.receipt_no - @shop = Shop.first + @shop = Shop.current_shop if @shop.is_rounding_adj new_total = Sale.get_rounding_adjustment(@sale_data.grand_total) else @@ -77,7 +77,7 @@ def create account_no = params[:account_no] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj # new_total = Sale.get_rounding_adjustment(saleObj.grand_total) diff --git a/app/controllers/origami/gift_voucher_controller.rb b/app/controllers/origami/gift_voucher_controller.rb index 572e248e..7ad78065 100644 --- a/app/controllers/origami/gift_voucher_controller.rb +++ b/app/controllers/origami/gift_voucher_controller.rb @@ -6,7 +6,7 @@ class Origami::GiftVoucherController < BaseOrigamiController sale_data = Sale.find_by_sale_id(@sale_id) total = 0 @gift_vouchercount = 0 - @shop = Shop.first + @shop = Shop.current_shop @rounding_adj = 0 @can_gift_voucher = 0 @member_discount = 0 @@ -48,7 +48,7 @@ class Origami::GiftVoucherController < BaseOrigamiController ref_no = params[:reference_no] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj @@ -66,6 +66,6 @@ class Origami::GiftVoucherController < BaseOrigamiController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/home_controller.rb b/app/controllers/origami/home_controller.rb index fe074210..30a6ce92 100755 --- a/app/controllers/origami/home_controller.rb +++ b/app/controllers/origami/home_controller.rb @@ -4,8 +4,8 @@ class Origami::HomeController < BaseOrigamiController def index @webview = check_mobile - @tables = Table.unscoped.all.active.order('status desc') - @rooms = Room.unscoped.all.active.order('status desc') + @tables = Table.unscope(:order).all.active.order('status desc') + @rooms = Room.unscope(:order).all.active.order('status desc') @complete = Sale.completed_sale("cashier") @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @@ -21,8 +21,8 @@ class Origami::HomeController < BaseOrigamiController @print_settings = PrintSetting.get_precision_delimiter() @webview = check_mobile - @tables = Table.unscoped.all.active.order('status desc') - @rooms = Room.unscoped.all.active.order('status desc') + @tables = Table.unscope(:order).all.active.order('status desc') + @rooms = Room.unscope(:order).all.active.order('status desc') @complete = Sale.completed_sale("cashier") @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @customers = Customer.pluck("customer_id, name") @@ -126,7 +126,7 @@ class Origami::HomeController < BaseOrigamiController lookup_edit_order = Lookup.collection_of('edit_order') if !lookup_edit_order.empty? lookup_edit_order.each do |edit_order| - if edit_order[0].downcase == "editorderorigami" + if edit_order[0].downcase == "editorderorigami" if edit_order[1] == '0' && (current_login_employee.role == 'cashier' || current_login_employee.role == 'waiter') @edit_order_origami = false end @@ -139,14 +139,14 @@ class Origami::HomeController < BaseOrigamiController lookup_changable_tax = Lookup.collection_of('changable_tax') if !lookup_changable_tax.empty? lookup_changable_tax.each do |changable_tax| - if changable_tax[0].downcase == "change" - if changable_tax[1] == '0' + if changable_tax[0].downcase == "change" + if changable_tax[1] == '0' @changable_tax = false end end end end - + end def check_emp_access_code diff --git a/app/controllers/origami/jcb_controller.rb b/app/controllers/origami/jcb_controller.rb index 1f979adc..3a64b8a0 100644 --- a/app/controllers/origami/jcb_controller.rb +++ b/app/controllers/origami/jcb_controller.rb @@ -12,7 +12,7 @@ class Origami::JcbController < BaseOrigamiController end total = 0 @jcbcount = 0 - @shop = Shop.first + @shop = Shop.current_shop @rounding_adj = 0 @can_jcb = 0 @member_discount= 0 @@ -66,7 +66,7 @@ class Origami::JcbController < BaseOrigamiController ref_no = params[:ref_no] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj @@ -89,6 +89,6 @@ class Origami::JcbController < BaseOrigamiController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/junction_pay_controller.rb b/app/controllers/origami/junction_pay_controller.rb index c77c2655..1b416c6a 100644 --- a/app/controllers/origami/junction_pay_controller.rb +++ b/app/controllers/origami/junction_pay_controller.rb @@ -11,7 +11,7 @@ class Origami::JunctionPayController < BaseOrigamiController @cashier_id = current_user.emp_id @payment_method_setting_nav = PaymentMethodSetting.all - @shop = Shop.first + @shop = Shop.current_shop if @shop.is_rounding_adj new_total = Sale.get_rounding_adjustment(sale_data.grand_total) else @@ -52,7 +52,7 @@ class Origami::JunctionPayController < BaseOrigamiController if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj diff --git a/app/controllers/origami/master_controller.rb b/app/controllers/origami/master_controller.rb index 15edb703..f36b86f0 100644 --- a/app/controllers/origami/master_controller.rb +++ b/app/controllers/origami/master_controller.rb @@ -12,7 +12,7 @@ class Origami::MasterController < BaseOrigamiController end total = 0 @mastercount = 0 - @shop = Shop.first + @shop = Shop.current_shop @rounding_adj = 0 @can_master = 0 @member_discount = 0 @@ -63,7 +63,7 @@ class Origami::MasterController < BaseOrigamiController ref_no = params[:ref_no] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj @@ -87,6 +87,6 @@ class Origami::MasterController < BaseOrigamiController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/movetable_controller.rb b/app/controllers/origami/movetable_controller.rb index 41c58941..86680c6e 100755 --- a/app/controllers/origami/movetable_controller.rb +++ b/app/controllers/origami/movetable_controller.rb @@ -105,7 +105,7 @@ class Origami::MovetableController < BaseOrigamiController # @type = (DiningFacility.find(change_to)).type # @moved_by = @current_user.name # @date = DateTime.now - # @shop = Shop.first + # @shop = Shop.current_shop # unique_code = "MoveTablePdf" # pdf_no = PrintSetting.where(:unique_code => unique_code).count # #print_settings = PrintSetting.find_by_unique_code(unique_code) diff --git a/app/controllers/origami/mpu_controller.rb b/app/controllers/origami/mpu_controller.rb index 220219c3..1a7743c1 100644 --- a/app/controllers/origami/mpu_controller.rb +++ b/app/controllers/origami/mpu_controller.rb @@ -11,7 +11,7 @@ class Origami::MpuController < BaseOrigamiController end total = 0 @mpucount = 0 - @shop = Shop.first + @shop = Shop.current_shop @rounding_adj = 0 @can_mpu = 0 @member_discount = 0 @@ -64,7 +64,7 @@ class Origami::MpuController < BaseOrigamiController ref_no = params[:ref_no] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj @@ -87,6 +87,6 @@ class Origami::MpuController < BaseOrigamiController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/order_reservation_controller.rb b/app/controllers/origami/order_reservation_controller.rb index 3fdeee25..508bf483 100644 --- a/app/controllers/origami/order_reservation_controller.rb +++ b/app/controllers/origami/order_reservation_controller.rb @@ -4,7 +4,7 @@ class Origami::OrderReservationController < BaseOrigamiController @order = OrderReservation.latest_order #.active @count_on_order = OrderReservation.get_count_on_order @count_on_completed = OrderReservation.get_count_on_completed - @shop = Shop.find_by_id(1) + @shop = Shop.current_shop @receipt_bill = check_receipt_bill end diff --git a/app/controllers/origami/orders_controller.rb b/app/controllers/origami/orders_controller.rb index 5f34d9a3..2a7c9aa3 100755 --- a/app/controllers/origami/orders_controller.rb +++ b/app/controllers/origami/orders_controller.rb @@ -5,8 +5,8 @@ class Origami::OrdersController < BaseOrigamiController @webview = true end - @tables = Table.unscoped.all.active.order('status desc') - @rooms = Room.unscoped.all.active.order('status desc') + @tables = Table.unscope(:order).all.active.order('status desc') + @rooms = Room.unscope(:order).all.active.order('status desc') @complete = Sale.where("DATE_FORMAT(created_at,'%Y-%m-%d') = ? and sale_status != 'new'",DateTime.now.strftime('%Y-%m-%d')) @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @order = Order.find(params[:order_id]) diff --git a/app/controllers/origami/paymal_controller.rb b/app/controllers/origami/paymal_controller.rb index 36c19327..cfabd2b5 100644 --- a/app/controllers/origami/paymal_controller.rb +++ b/app/controllers/origami/paymal_controller.rb @@ -6,7 +6,7 @@ class Origami::PaymalController < BaseOrigamiController @membership_rebate_balance=0 sale_data = Sale.find_by_sale_id(@sale_id) @receipt_no = sale_data.receipt_no - @shop = Shop.first + @shop = Shop.current_shop if @shop.is_rounding_adj new_total = Sale.get_rounding_adjustment(sale_data.grand_total) else @@ -75,7 +75,7 @@ def create puts params.to_json if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj diff --git a/app/controllers/origami/payments_controller.rb b/app/controllers/origami/payments_controller.rb index c6c61602..401e231b 100755 --- a/app/controllers/origami/payments_controller.rb +++ b/app/controllers/origami/payments_controller.rb @@ -59,7 +59,7 @@ class Origami::PaymentsController < BaseOrigamiController end #shop detail - ## shop_detail = Shop.first + ## shop_detail = Shop.current_shop # customer= Customer.where('customer_id=' +.customer_id) customer = Customer.find(sale_data.customer_id) # rounding adjustment @@ -141,7 +141,7 @@ class Origami::PaymentsController < BaseOrigamiController if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) sale_items = SaleItem.get_all_sale_items(sale_id) - #shop_detail = Shop.first + #shop_detail = Shop.current_shop # rounding adjustment if !path.include? ("credit_payment") if shop_detail.is_rounding_adj @@ -577,7 +577,7 @@ class Origami::PaymentsController < BaseOrigamiController customer= Customer.find(saleObj.customer_id) #shop detail - #shop_detail = Shop.first + #shop_detail = Shop.current_shop # get member information rebate = MembershipSetting.find_by_rebate(1) if customer.membership_id != nil && rebate @@ -686,7 +686,7 @@ class Origami::PaymentsController < BaseOrigamiController customer= Customer.find(saleObj.customer_id) #shop detail - #shop_detail = Shop.first + #shop_detail = Shop.current_shop printer = PrintSetting.all unique_code="ReceiptBillPdf" diff --git a/app/controllers/origami/paypar_payments_controller.rb b/app/controllers/origami/paypar_payments_controller.rb index fbcd348c..f2fb3c7b 100755 --- a/app/controllers/origami/paypar_payments_controller.rb +++ b/app/controllers/origami/paypar_payments_controller.rb @@ -7,7 +7,7 @@ class Origami::PayparPaymentsController < BaseOrigamiController payment_method = "paypar" if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment if shop_details.is_rounding_adj diff --git a/app/controllers/origami/redeem_payments_controller.rb b/app/controllers/origami/redeem_payments_controller.rb index c0edf879..0d1836c0 100755 --- a/app/controllers/origami/redeem_payments_controller.rb +++ b/app/controllers/origami/redeem_payments_controller.rb @@ -6,7 +6,7 @@ class Origami::RedeemPaymentsController < BaseOrigamiController @membership_rebate_balance=0 sale_data = Sale.find_by_sale_id(@sale_id) - @shop = Shop.first + @shop = Shop.current_shop if @shop.is_rounding_adj new_total = Sale.get_rounding_adjustment(sale_data.grand_total) else diff --git a/app/controllers/origami/request_bills_controller.rb b/app/controllers/origami/request_bills_controller.rb index 6d36f319..69a316f5 100755 --- a/app/controllers/origami/request_bills_controller.rb +++ b/app/controllers/origami/request_bills_controller.rb @@ -90,7 +90,7 @@ class Origami::RequestBillsController < ApplicationController # Not Use for these printed bill cannot give customer # unique_code = "ReceiptBillPdf" # #shop detail - # shop_details = Shop.find(1) + # shop_details = Shop.current_shop # # customer= Customer.where('customer_id=' +.customer_id) # customer= Customer.find(@sale_data.customer_id) # # get member information diff --git a/app/controllers/origami/rooms_controller.rb b/app/controllers/origami/rooms_controller.rb index 80eb5641..c94c5c18 100755 --- a/app/controllers/origami/rooms_controller.rb +++ b/app/controllers/origami/rooms_controller.rb @@ -1,7 +1,7 @@ class Origami::RoomsController < BaseOrigamiController def index - @tables = Table.unscoped.all.active.order('status desc') - @rooms = Room.unscoped.all.active.order('status desc') + @tables = Table.unscope(:order).all.active.order('status desc') + @rooms = Room.unscope(:order).all.active.order('status desc') @complete = Sale.completed_sale("cashier") @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @shift = ShiftSale.current_open_shift(current_user.id) @@ -17,8 +17,8 @@ class Origami::RoomsController < BaseOrigamiController @webview = true end - @tables = Table.unscoped.all.active.order('status desc') - @rooms = Room.unscoped.all.active.order('status desc') + @tables = Table.unscope(:order).all.active.order('status desc') + @rooms = Room.unscope(:order).all.active.order('status desc') @complete = Sale.completed_sale("cashier") @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @customers = Customer.pluck("customer_id, name") @@ -29,7 +29,7 @@ class Origami::RoomsController < BaseOrigamiController @status_sale = "" @sale_array = Array.new - @shop = Shop.first + @shop = Shop.current_shop @membership = MembershipSetting::MembershipSetting @payment_methods = PaymentMethodSetting.all diff --git a/app/controllers/origami/sales_controller.rb b/app/controllers/origami/sales_controller.rb index d2af3258..98bbd288 100755 --- a/app/controllers/origami/sales_controller.rb +++ b/app/controllers/origami/sales_controller.rb @@ -5,8 +5,8 @@ class Origami::SalesController < BaseOrigamiController @webview = true end - @tables = Table.unscoped.all.active.order('status desc') - @rooms = Room.unscoped.all.active.order('status desc') + @tables = Table.unscope(:order).all.active.order('status desc') + @rooms = Room.unscope(:order).all.active.order('status desc') @complete = Sale.completed_sale("cashier") @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @customers = Customer.pluck("customer_id, name") diff --git a/app/controllers/origami/second_display_controller.rb b/app/controllers/origami/second_display_controller.rb index 21c0674d..392b85e6 100644 --- a/app/controllers/origami/second_display_controller.rb +++ b/app/controllers/origami/second_display_controller.rb @@ -27,7 +27,7 @@ class Origami::SecondDisplayController < BaseOrigamiController #Shop Name in Navbor # helper_method :shop_detail # def shop_detail - # @shop = Shop.first + # @shop = Shop.current_shop # end diff --git a/app/controllers/origami/split_bill_controller.rb b/app/controllers/origami/split_bill_controller.rb index fb6db35f..12a232a6 100755 --- a/app/controllers/origami/split_bill_controller.rb +++ b/app/controllers/origami/split_bill_controller.rb @@ -413,7 +413,7 @@ class Origami::SplitBillController < BaseOrigamiController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/table_invoices_controller.rb b/app/controllers/origami/table_invoices_controller.rb index 7082e44c..e3f9f0ab 100755 --- a/app/controllers/origami/table_invoices_controller.rb +++ b/app/controllers/origami/table_invoices_controller.rb @@ -1,7 +1,7 @@ class Origami::TableInvoicesController < BaseOrigamiController def index @table = DiningFacility.find(params[:table_id]) - shop = Shop.first + shop = Shop.current_shop puts "table bookig lenght" @sale_array = Array.new @table.bookings.each do |booking| @@ -34,7 +34,7 @@ class Origami::TableInvoicesController < BaseOrigamiController @table = DiningFacility.find(params[:table_id]) @membership = MembershipSetting::MembershipSetting @payment_methods = PaymentMethodSetting.all - shop = Shop.first + shop = Shop.current_shop @sale_array = Array.new @table.bookings.each do |booking| if booking.sale_id.nil? diff --git a/app/controllers/origami/unionpay_controller.rb b/app/controllers/origami/unionpay_controller.rb index b351d40a..23587ca0 100644 --- a/app/controllers/origami/unionpay_controller.rb +++ b/app/controllers/origami/unionpay_controller.rb @@ -11,7 +11,7 @@ class Origami::UnionpayController < BaseOrigamiController end total = 0 @unionpaycount = 0 - @shop = Shop.first + @shop = Shop.current_shop @rounding_adj = 0 @can_unionpay = 0 @member_discount = 0 @@ -61,7 +61,7 @@ class Origami::UnionpayController < BaseOrigamiController ref_no = params[:ref_no] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj @@ -85,6 +85,6 @@ class Origami::UnionpayController < BaseOrigamiController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/visa_controller.rb b/app/controllers/origami/visa_controller.rb index c50339e4..6eb11be5 100644 --- a/app/controllers/origami/visa_controller.rb +++ b/app/controllers/origami/visa_controller.rb @@ -11,7 +11,7 @@ class Origami::VisaController < BaseOrigamiController end total = 0 @visacount = 0 - @shop = Shop.first + @shop = Shop.current_shop @rounding_adj = 0 @can_visa = 0 @member_discount = 0 @@ -61,7 +61,7 @@ class Origami::VisaController < BaseOrigamiController ref_no = params[:ref_no] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj @@ -85,6 +85,6 @@ class Origami::VisaController < BaseOrigamiController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/void_controller.rb b/app/controllers/origami/void_controller.rb index 5352b7c3..7fb54825 100755 --- a/app/controllers/origami/void_controller.rb +++ b/app/controllers/origami/void_controller.rb @@ -116,7 +116,7 @@ class Origami::VoidController < BaseOrigamiController customer= Customer.find(sale.customer_id) #shop detail - shop_details = current_shop + shop_details = Shop.current_shop # get member information rebate = MembershipSetting.find_by_rebate(1) if customer.membership_id != nil && rebate diff --git a/app/controllers/origami/voucher_controller.rb b/app/controllers/origami/voucher_controller.rb index e512a48b..1b79cb49 100755 --- a/app/controllers/origami/voucher_controller.rb +++ b/app/controllers/origami/voucher_controller.rb @@ -8,7 +8,7 @@ class Origami::VoucherController < BaseOrigamiController @vouchercount = 0 others = 0 - @shop = Shop.first + @shop = Shop.current_shop if @shop.is_rounding_adj new_total = Sale.get_rounding_adjustment(sale_data.grand_total) else diff --git a/app/controllers/origami/waste_spoile_controller.rb b/app/controllers/origami/waste_spoile_controller.rb index 6a68a2b9..ba0846ee 100755 --- a/app/controllers/origami/waste_spoile_controller.rb +++ b/app/controllers/origami/waste_spoile_controller.rb @@ -89,7 +89,7 @@ class Origami::WasteSpoileController < BaseOrigamiController customer= Customer.find(sale.customer_id) #shop detail - shop_details = current_shop + shop_details = Shop.current_shop # get member information rebate = MembershipSetting.find_by_rebate(1) if customer.membership_id != nil && rebate diff --git a/app/controllers/reports/product_sale_controller.rb b/app/controllers/reports/product_sale_controller.rb index 9791545e..61f17396 100644 --- a/app/controllers/reports/product_sale_controller.rb +++ b/app/controllers/reports/product_sale_controller.rb @@ -22,6 +22,6 @@ class Reports::ProductSaleController < BaseReportController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/reports/receipt_no_controller.rb b/app/controllers/reports/receipt_no_controller.rb index eeff4bf0..1136bc31 100755 --- a/app/controllers/reports/receipt_no_controller.rb +++ b/app/controllers/reports/receipt_no_controller.rb @@ -183,7 +183,7 @@ authorize_resource :class => false customer= Customer.find(saleObj.customer_id) #shop detail - #shop_detail = Shop.first + #shop_detail = Shop.current_shop # get member information rebate = MembershipSetting.find_by_rebate(1) if customer.membership_id != nil && rebate diff --git a/app/controllers/settings/shops_controller.rb b/app/controllers/settings/shops_controller.rb index 598e4f9b..9e902dad 100644 --- a/app/controllers/settings/shops_controller.rb +++ b/app/controllers/settings/shops_controller.rb @@ -59,11 +59,11 @@ class Settings::ShopsController < ApplicationController File.delete(delete_path) end end - save_path = Rails.root.join("public/#{current_shop.shop_code}_#{a.original_filename}") + save_path = Rails.root.join("public/#{Shop.current_shop.shop_code}_#{a.original_filename}") File.open(save_path, 'wb') do |f| f.write a.read end - audio_name = "#{current_shop.shop_code}_#{a.original_filename}" + audio_name = "#{Shop.current_shop.shop_code}_#{a.original_filename}" @settings_shop.display_images.where(:name => "order_audio").destroy_all @display_image = @settings_shop.display_images.create!(:shop_id => @shop.id, :name => "order_audio", :image => audio_name) else diff --git a/app/controllers/transactions/sales_controller.rb b/app/controllers/transactions/sales_controller.rb index 83efc401..661b42e9 100755 --- a/app/controllers/transactions/sales_controller.rb +++ b/app/controllers/transactions/sales_controller.rb @@ -346,7 +346,7 @@ class Transactions::SalesController < ApplicationController customer= Customer.find(sale.customer_id) #shop detail - shop_details = Shop.find_by_id(1) + shop_details = Shop.current_shop # get member information rebate = MembershipSetting.find_by_rebate(1) if customer.membership_id != nil && rebate diff --git a/app/models/application_record.rb b/app/models/application_record.rb index 10a4cba8..590cdf8d 100755 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -1,3 +1,14 @@ class ApplicationRecord < ActiveRecord::Base self.abstract_class = true + + def self.inherited(subclass) + super + + return unless subclass.superclass == self + return unless subclass.column_names.include? 'shop_id' + + subclass.class_eval do + acts_as_tenant(:shop) + end + end end diff --git a/app/models/kbz_pay.rb b/app/models/kbz_pay.rb index 5893e048..523a7fc5 100644 --- a/app/models/kbz_pay.rb +++ b/app/models/kbz_pay.rb @@ -3,13 +3,13 @@ class KbzPay KBZ_PAY = 'KBZPay' def self.pay(amount, receipt_no, url, key, app_id, code) - shop = Shop.first + shop = Shop.current_shop prefix = shop.shop_code receipt_no = "#{prefix}#{receipt_no}" datetime = DateTime.now.strftime("%d%m%Y%H%M") kbz_app_id = app_id - kbz_merch_code = code + kbz_merch_code = code kbz_api_key = key kbz_provider_url = "#{url}/precreate" @@ -58,17 +58,17 @@ class KbzPay # Rails.logger.debug result['Response'] return false, result['Response'] end - + end def self.query(receipt_no, current_user, url, key, app_id, code) - shop = Shop.first + shop = Shop.current_shop prefix = shop.shop_code receipt_no = "#{prefix}#{receipt_no}" amount = 0 datetime = DateTime.now.strftime("%d%m%Y%H%M") kbz_app_id = app_id - kbz_merch_code = code + kbz_merch_code = code kbz_api_key = key kbz_provider_url = "#{url}/queryorder" @@ -122,7 +122,7 @@ class KbzPay # return true, "successfully paid by KBZ PAY" elsif result['Response']['trade_status'] == "PAY_FAILED" - + # return false, "pay failed by KBZ PAY" elsif result['Response']['trade_status'] == "WAIT_PAY" # return false , "Waiting to pay by KBZ PAY" @@ -135,4 +135,4 @@ class KbzPay return amount end -end \ No newline at end of file +end diff --git a/app/models/menu.rb b/app/models/menu.rb index a825cc7b..1dd0aaed 100755 --- a/app/models/menu.rb +++ b/app/models/menu.rb @@ -141,7 +141,7 @@ class Menu < ApplicationRecord end else # Menu by Menu Import - @shop = Shop.first + @shop = Shop.current_shop shop_code = "" if !@shop.nil? if @shop.shop_code diff --git a/app/models/order_queue_station.rb b/app/models/order_queue_station.rb index 147ebdc4..6d8830f8 100755 --- a/app/models/order_queue_station.rb +++ b/app/models/order_queue_station.rb @@ -297,7 +297,7 @@ class OrderQueueStation < ApplicationRecord @type = (DiningFacility.find(change_to)).type @moved_by = current_user @date = DateTime.now - @shop = Shop.first + @shop = Shop.current_shop unique_code = "MoveTablePdf" # pdf_no = PrintSetting.where(:unique_code => unique_code).count print_settings = PrintSetting.find_by_unique_code(unique_code) diff --git a/app/models/order_reservation.rb b/app/models/order_reservation.rb index 8de88ee2..60c33d2e 100644 --- a/app/models/order_reservation.rb +++ b/app/models/order_reservation.rb @@ -157,7 +157,7 @@ class OrderReservation < ApplicationRecord def self.update_doemal_payment(order,current_user,receipt_bill) if(Sale.exists?(order.sale_id)) saleObj = Sale.find(order.sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment if shop_details.is_rounding_adj a = saleObj.grand_total % 25 # Modulus @@ -194,7 +194,7 @@ class OrderReservation < ApplicationRecord shift = ShiftSale.find(saleObj.shift_sale_id) cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id) - shop_detail = Shop.first + shop_detail = Shop.current_shop order_reservation = OrderReservation.get_order_reservation_info(saleObj.sale_id) if !cashier_terminal.nil? # Calculate Food and Beverage Total @@ -400,7 +400,7 @@ class OrderReservation < ApplicationRecord end def self.check_new_order - shop = Shop.find_by_id(1) + shop = Shop.current_shop if !shop.shop_code.nil? shop_code = shop.shop_code else @@ -418,7 +418,7 @@ class OrderReservation < ApplicationRecord end def self.check_order_send_to_kitchen - shop = Shop.find_by_id(1) + shop = Shop.current_shop if !shop.shop_code.nil? shop_code = shop.shop_code else @@ -436,7 +436,7 @@ class OrderReservation < ApplicationRecord end def self.check_order_ready_to_delivery - shop = Shop.find_by_id(1) + shop = Shop.current_shop if !shop.shop_code.nil? shop_code = shop.shop_code else diff --git a/app/models/printer/order_queue_printer.rb b/app/models/printer/order_queue_printer.rb index ed14d884..5d72773c 100755 --- a/app/models/printer/order_queue_printer.rb +++ b/app/models/printer/order_queue_printer.rb @@ -38,7 +38,7 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker end # end - shop = Shop.first + shop = Shop.current_shop directory_name = 'public/orders_'+shop.shop_code Dir.mkdir(directory_name) unless File.exists?(directory_name) @@ -80,7 +80,7 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker print_setting = PrintSetting.all.order("id ASC") order=print_query('order_summary', order_id) - shop = Shop.first + shop = Shop.current_shop directory_name = 'public/orders_'+shop.shop_code Dir.mkdir(directory_name) unless File.exists?(directory_name) @@ -192,7 +192,7 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker order=print_query('booking_summary', booking_id) - shop = Shop.first + shop = Shop.current_shop directory_name = 'public/orders_'+shop.shop_code Dir.mkdir(directory_name) unless File.exists?(directory_name) diff --git a/app/models/room.rb b/app/models/room.rb index 87f232e9..63c548ec 100755 --- a/app/models/room.rb +++ b/app/models/room.rb @@ -1,4 +1,3 @@ class Room < DiningFacility - has_many :bookings, :foreign_key => 'dining_facility_id' end diff --git a/app/models/sale.rb b/app/models/sale.rb index 85a81950..59d3683b 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -440,7 +440,7 @@ class Sale < ApplicationRecord #compute - invoice total def compute_by_sale_items(total_discount, discount_type=nil, order_source=nil, tax_type=nil, type=nil) - shop = Shop.first + shop = Shop.current_shop #Computation Fields subtotal_price = 0 @@ -507,7 +507,7 @@ class Sale < ApplicationRecord # Tax Re-Calculte def compute_tax(total_taxable, total_discount = 0, order_source = nil, tax_type=nil) - shop = Shop.first + shop = Shop.current_shop #if tax is not apply create new record # SaleTax.where("sale_id='#{sale.sale_id}'").find_each do |existing_tax| @@ -627,7 +627,7 @@ class Sale < ApplicationRecord # Tax Calculate def apply_tax(total_taxable, order_source = nil, tax_type = nil) - shop = Shop.first + shop = Shop.current_shop #if tax is not apply create new record # SaleTax.where("sale_id='#{self.sale_id}'").find_each do |existing_tax| @@ -645,7 +645,7 @@ class Sale < ApplicationRecord order_source = "cashier" end - # tax_data = TaxProfile.unscoped.where("group_type=?",order_source).pluck(:id) + # tax_data = TaxProfile.unscope(:order).where("group_type=?",order_source).pluck(:id) # customer = Customer.find(self.customer_id).tax_profiles tax_profiles = unique_tax_profiles(order_source, self.customer_id) @@ -710,7 +710,7 @@ class Sale < ApplicationRecord end def adjust_rounding - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment if shop_details.is_rounding_adj new_total = Sale.get_rounding_adjustment(self.grand_total) @@ -726,7 +726,7 @@ class Sale < ApplicationRecord #Generate new Receipt No when it is not assigned def generate_receipt_no #shop_code and client_code - shop_details = Shop.first + shop_details = Shop.current_shop #Date-Shift- if self.receipt_no.nil? prefix = DateTime.now().utc @@ -1239,7 +1239,7 @@ end #product sale report query def self.get_menu_item_query(order_by) - query = MenuItem.unscoped.select("acc.id as account_id, + query = MenuItem.unscope(:order).select("acc.id as account_id, acc.title as account_name, mii.item_instance_code as item_code, " + "(CASE WHEN si.qty IS NOT NULL THEN SUM(si.qty) ELSE 0 END) as total_item," + diff --git a/app/models/shop.rb b/app/models/shop.rb index 75c30dd7..41110515 100755 --- a/app/models/shop.rb +++ b/app/models/shop.rb @@ -1,13 +1,17 @@ class Shop < ApplicationRecord - #ShopDetail = Shop.find_by_id(1) + #ShopDetail = Shop.current_shop # Shop Image Uploader - mount_uploader :logo, ShopImageUploader + mount_uploader :logo, ShopImageUploader - has_many :display_images + has_many :display_images accepts_nested_attributes_for :display_images def file_data=(input_data) self.data = input_data.read end + + def self.current_shop + ActsAsTenant.current_tenant + end end diff --git a/app/uploaders/commissioner_image_uploader.rb b/app/uploaders/commissioner_image_uploader.rb index 9b65e4a8..42e90a16 100644 --- a/app/uploaders/commissioner_image_uploader.rb +++ b/app/uploaders/commissioner_image_uploader.rb @@ -20,11 +20,11 @@ class CommissionerImageUploader < CarrierWave::Uploader::Base end def filename - if Shop.first.shop_code.nil? - "#{original_filename}" if original_filename.present? + if Shop.current_shop.shop_code.nil? + "#{original_filename}" if original_filename.present? else - "#{Shop.first.shop_code}_#{original_filename}" if original_filename.present? - end + "#{Shop.current_shop.shop_code}_#{original_filename}" if original_filename.present? + end end # def cache_dir @@ -62,6 +62,6 @@ class CommissionerImageUploader < CarrierWave::Uploader::Base # Avoid using model.id or version_name here, see uploader/store.rb for details. # def filename # "something.jpg" if original_filename - # end + # end -end \ No newline at end of file +end diff --git a/app/uploaders/customer_image_uploader.rb b/app/uploaders/customer_image_uploader.rb index be1326d6..77a133af 100644 --- a/app/uploaders/customer_image_uploader.rb +++ b/app/uploaders/customer_image_uploader.rb @@ -20,11 +20,11 @@ class CustomerImageUploader < CarrierWave::Uploader::Base end def filename - if Shop.first.shop_code.nil? - "#{original_filename}" if original_filename.present? + if Shop.current_shop.shop_code.nil? + "#{original_filename}" if original_filename.present? else - "#{Shop.first.shop_code}_#{original_filename}" if original_filename.present? - end + "#{Shop.current_shop.shop_code}_#{original_filename}" if original_filename.present? + end end # def cache_dir @@ -62,6 +62,6 @@ class CustomerImageUploader < CarrierWave::Uploader::Base # Avoid using model.id or version_name here, see uploader/store.rb for details. # def filename # "something.jpg" if original_filename - # end + # end -end \ No newline at end of file +end diff --git a/app/uploaders/employee_image_uploader.rb b/app/uploaders/employee_image_uploader.rb index 17c9d120..62aa3e15 100644 --- a/app/uploaders/employee_image_uploader.rb +++ b/app/uploaders/employee_image_uploader.rb @@ -20,11 +20,11 @@ class EmployeeImageUploader < CarrierWave::Uploader::Base end def filename - if Shop.first.shop_code.nil? - "#{original_filename}" if original_filename.present? + if Shop.current_shop.shop_code.nil? + "#{original_filename}" if original_filename.present? else - "#{Shop.first.shop_code}_#{original_filename}" if original_filename.present? - end + "#{Shop.current_shop.shop_code}_#{original_filename}" if original_filename.present? + end end # def cache_dir @@ -62,6 +62,6 @@ class EmployeeImageUploader < CarrierWave::Uploader::Base # Avoid using model.id or version_name here, see uploader/store.rb for details. # def filename # "something.jpg" if original_filename - # end + # end -end \ No newline at end of file +end diff --git a/app/uploaders/menu_item_image_uploader.rb b/app/uploaders/menu_item_image_uploader.rb index 7a4b2039..5f23cafc 100755 --- a/app/uploaders/menu_item_image_uploader.rb +++ b/app/uploaders/menu_item_image_uploader.rb @@ -15,16 +15,16 @@ class MenuItemImageUploader < CarrierWave::Uploader::Base # Override the directory where uploaded files will be stored. # This is a sensible default for uploaders that are meant to be mounted: def store_dir - "image/menu_images/#{Shop.first.shop_code}" + "image/menu_images/#{Shop.current_shop.shop_code}" # "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end def filename - if Shop.first.shop_code.nil? - "#{original_filename}" if original_filename.present? + if Shop.current_shop.shop_code.nil? + "#{original_filename}" if original_filename.present? else - "#{Shop.first.shop_code}_#{original_filename}" if original_filename.present? - end + "#{Shop.current_shop.shop_code}_#{original_filename}" if original_filename.present? + end end # def cache_dir @@ -42,7 +42,7 @@ class MenuItemImageUploader < CarrierWave::Uploader::Base # Process files as they are uploaded: # process scale: [200, 300] process :resize_to_fit => [400, 250]#[200, 150] - + # # def scale(width, height) # # do something diff --git a/app/uploaders/product_image_uploader.rb b/app/uploaders/product_image_uploader.rb index c39d867d..35fde675 100755 --- a/app/uploaders/product_image_uploader.rb +++ b/app/uploaders/product_image_uploader.rb @@ -20,11 +20,11 @@ class ProductImageUploader < CarrierWave::Uploader::Base end def filename - if Shop.first.shop_code.nil? - "#{original_filename}" if original_filename.present? + if Shop.current_shop.shop_code.nil? + "#{original_filename}" if original_filename.present? else - "#{Shop.first.shop_code}_#{original_filename}" if original_filename.present? - end + "#{Shop.current_shop.shop_code}_#{original_filename}" if original_filename.present? + end end # def cache_dir diff --git a/app/uploaders/shop_image_uploader.rb b/app/uploaders/shop_image_uploader.rb index 394704c3..c27fb65c 100644 --- a/app/uploaders/shop_image_uploader.rb +++ b/app/uploaders/shop_image_uploader.rb @@ -20,11 +20,11 @@ class ShopImageUploader < CarrierWave::Uploader::Base end def filename - if Shop.first.shop_code.nil? - "#{original_filename}" if original_filename.present? + if Shop.current_shop.shop_code.nil? + "#{original_filename}" if original_filename.present? else - "#{Shop.first.shop_code}_#{original_filename}" if original_filename.present? - end + "#{Shop.current_shop.shop_code}_#{original_filename}" if original_filename.present? + end end # def cache_dir @@ -62,6 +62,6 @@ class ShopImageUploader < CarrierWave::Uploader::Base # Avoid using model.id or version_name here, see uploader/store.rb for details. # def filename # "something.jpg" if original_filename - # end + # end -end \ No newline at end of file +end diff --git a/app/views/origami/dashboard/_menu.json.jbuilder b/app/views/origami/dashboard/_menu.json.jbuilder index 6d1ec624..372d521c 100644 --- a/app/views/origami/dashboard/_menu.json.jbuilder +++ b/app/views/origami/dashboard/_menu.json.jbuilder @@ -8,7 +8,7 @@ json.valid_time_to menu.valid_time_to.strftime("%H:%M") if (menu.menu_categories) order_by = Lookup.find_by_lookup_type("order_by") # if !order_by.nil? && order_by.value == "name" - # categories = MenuCategory.unscoped.where("menu_id ='#{menu.id}'").order("name asc") + # categories = MenuCategory.unscope(:order).where("menu_id ='#{menu.id}'").order("name asc") # else # categories = menu.menu_categories # end diff --git a/lib/tasks/receipt.rake b/lib/tasks/receipt.rake index 180b0de4..af50f3f3 100644 --- a/lib/tasks/receipt.rake +++ b/lib/tasks/receipt.rake @@ -3,7 +3,7 @@ namespace :consolidate do task :receipt => :environment do # Receipt.delete_all sales = Sale.all_receipts - shop = Shop.first #current_shop + shop = Shop.current_shop #Shop.current_shop sales.each do |sale| if sale.shift_sale_id.present? @@ -57,7 +57,7 @@ namespace :consolidate do ReceiptDetail.delete_all sales = Sale.all_receipt_details - shop = Shop.first #current_shop + shop = Shop.current_shop #Shop.current_shop sale_id = '' count = 0 From 1607cb70d349a27cba3e33652a3a22fc95d0a37e Mon Sep 17 00:00:00 2001 From: Thein Lin Kyaw Date: Mon, 2 Dec 2019 17:19:28 +0630 Subject: [PATCH 02/17] Single database for multiple shops Use ActsAsTenant as Multi-tenancy for shops See below files: - app/controllers/concern/multi_tenancy.rb - app/models/application_record.rb - app/models/shop.rb An initializer can be created to control option in ActsAsTenant. config/initializers/acts_as_tenant.rb require 'acts_as_tenant/sidekiq' ActsAsTenant.configure do |config| config.require_tenant = false # true end more detail: https://github.com/ErwinM/acts_as_tenant --- Gemfile | 3 +++ Gemfile.lock | 8 ++++++-- app/controllers/api/api_controller.rb | 2 +- app/controllers/api/bill_controller.rb | 2 +- .../api/call_waiters_controller.rb | 2 +- .../order_reservation_controller.rb | 2 +- app/controllers/api/orders_controller.rb | 2 +- .../api/payment/mobilepayment_controller.rb | 2 +- .../api/sound_effect_controller.rb | 2 +- app/controllers/application_controller.rb | 2 +- app/controllers/base_controller.rb | 3 ++- app/controllers/base_crm_controller.rb | 2 +- app/controllers/base_inventory_controller.rb | 2 +- app/controllers/base_oqs_controller.rb | 2 +- app/controllers/base_origami_controller.rb | 2 +- app/controllers/base_report_controller.rb | 4 ++-- app/controllers/base_waiter_controller.rb | 2 +- .../concerns/login_verification.rb | 12 +++++------ app/controllers/concerns/multi_tenancy.rb | 20 +++++++++++++++++++ app/controllers/crm/customers_controller.rb | 2 +- app/controllers/home_controller.rb | 2 +- .../inventory/inventory_controller.rb | 2 +- .../inventory_definitions_controller.rb | 2 +- .../inventory/stock_check_items_controller.rb | 2 +- .../inventory/stock_checks_controller.rb | 4 ++-- .../inventory/stock_journals_controller.rb | 2 +- app/controllers/oqs/edit_controller.rb | 2 +- app/controllers/origami/alipay_controller.rb | 6 +++--- .../origami/credit_payments_controller.rb | 4 ++-- .../origami/credit_sales_controller.rb | 12 +++++------ .../origami/customers_controller.rb | 2 +- .../origami/dashboard_controller.rb | 2 +- app/controllers/origami/dinga_controller.rb | 4 ++-- .../origami/gift_voucher_controller.rb | 6 +++--- app/controllers/origami/home_controller.rb | 16 +++++++-------- app/controllers/origami/jcb_controller.rb | 6 +++--- .../origami/junction_pay_controller.rb | 4 ++-- app/controllers/origami/master_controller.rb | 6 +++--- .../origami/movetable_controller.rb | 2 +- app/controllers/origami/mpu_controller.rb | 6 +++--- .../origami/order_reservation_controller.rb | 2 +- app/controllers/origami/orders_controller.rb | 4 ++-- app/controllers/origami/paymal_controller.rb | 4 ++-- .../origami/payments_controller.rb | 8 ++++---- .../origami/paypar_payments_controller.rb | 2 +- .../origami/redeem_payments_controller.rb | 2 +- .../origami/request_bills_controller.rb | 2 +- app/controllers/origami/rooms_controller.rb | 10 +++++----- app/controllers/origami/sales_controller.rb | 4 ++-- .../origami/second_display_controller.rb | 2 +- .../origami/split_bill_controller.rb | 2 +- .../origami/table_invoices_controller.rb | 4 ++-- .../origami/unionpay_controller.rb | 6 +++--- app/controllers/origami/visa_controller.rb | 6 +++--- app/controllers/origami/void_controller.rb | 2 +- app/controllers/origami/voucher_controller.rb | 2 +- .../origami/waste_spoile_controller.rb | 2 +- .../reports/product_sale_controller.rb | 2 +- .../reports/receipt_no_controller.rb | 2 +- app/controllers/settings/shops_controller.rb | 4 ++-- .../transactions/sales_controller.rb | 2 +- app/models/application_record.rb | 11 ++++++++++ app/models/kbz_pay.rb | 14 ++++++------- app/models/menu.rb | 2 +- app/models/order_queue_station.rb | 2 +- app/models/order_reservation.rb | 10 +++++----- app/models/printer/order_queue_printer.rb | 6 +++--- app/models/room.rb | 1 - app/models/sale.rb | 14 ++++++------- app/models/shop.rb | 10 +++++++--- app/uploaders/commissioner_image_uploader.rb | 12 +++++------ app/uploaders/customer_image_uploader.rb | 12 +++++------ app/uploaders/employee_image_uploader.rb | 12 +++++------ app/uploaders/menu_item_image_uploader.rb | 12 +++++------ app/uploaders/product_image_uploader.rb | 8 ++++---- app/uploaders/shop_image_uploader.rb | 12 +++++------ .../origami/dashboard/_menu.json.jbuilder | 2 +- lib/tasks/receipt.rake | 4 ++-- 78 files changed, 215 insertions(+), 173 deletions(-) create mode 100644 app/controllers/concerns/multi_tenancy.rb diff --git a/Gemfile b/Gemfile index e0d9e933..ba568b94 100644 --- a/Gemfile +++ b/Gemfile @@ -41,6 +41,9 @@ gem 'material_icons' gem 'font-awesome-rails', '~> 4.7', '>= 4.7.0.2' gem 'rack-cors' +# Multi-tenancy for shops +gem 'acts_as_tenant' + # image upload gem 'carrierwave', '~> 1.0' gem 'mini_magick' diff --git a/Gemfile.lock b/Gemfile.lock index 633b5965..bbcc1085 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -46,6 +46,9 @@ GEM i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) + acts_as_tenant (0.4.4) + rails (>= 4.0) + request_store (>= 1.0.5) aescrypt (1.0.0) airbrussh (1.4.0) sshkit (>= 1.6.1, != 1.7.0) @@ -219,6 +222,8 @@ GEM rb-inotify (0.10.0) ffi (~> 1.0) redis (3.3.5) + request_store (1.4.1) + rack (>= 1.4) roo (1.13.2) nokogiri rubyzip @@ -315,6 +320,7 @@ PLATFORMS ruby DEPENDENCIES + acts_as_tenant aescrypt axlsx (= 2.0.1) axlsx_rails @@ -374,10 +380,8 @@ DEPENDENCIES web-console (>= 3.3.0) whenever - RUBY VERSION ruby 2.4.1p111 - BUNDLED WITH 2.0.2 diff --git a/app/controllers/api/api_controller.rb b/app/controllers/api/api_controller.rb index 0e8ea909..8a84cfa1 100755 --- a/app/controllers/api/api_controller.rb +++ b/app/controllers/api/api_controller.rb @@ -1,5 +1,5 @@ class Api::ApiController < ActionController::API - include TokenVerification + include TokenVerification, MultiTenancy include ActionController::MimeResponds # before_action :lookup_domain diff --git a/app/controllers/api/bill_controller.rb b/app/controllers/api/bill_controller.rb index 7a00666a..77fc9204 100755 --- a/app/controllers/api/bill_controller.rb +++ b/app/controllers/api/bill_controller.rb @@ -106,7 +106,7 @@ class Api::BillController < Api::ApiController # unique_code = "ReceiptBillPdf" # #shop detail - # shop_details = Shop.find(1) + # shop_details = Shop.current_shop # customer= Customer.find(@sale_data.customer_id) # # get member information diff --git a/app/controllers/api/call_waiters_controller.rb b/app/controllers/api/call_waiters_controller.rb index 066fa30c..5beba9a6 100644 --- a/app/controllers/api/call_waiters_controller.rb +++ b/app/controllers/api/call_waiters_controller.rb @@ -23,7 +23,7 @@ class Api::CallWaitersController < ActionController::API end ActionCable.server.broadcast "call_waiter_channel",table: @table,time:@time,from: from, shift_ids: shift_ids # get printer info - @shop = Shop.first + @shop = Shop.current_shop unique_code = "CallWaiterPdf" print_settings = PrintSetting.find_by_unique_code(unique_code) printer = Printer::ReceiptPrinter.new(print_settings) diff --git a/app/controllers/api/order_reserve/order_reservation_controller.rb b/app/controllers/api/order_reserve/order_reservation_controller.rb index 32c2192e..cfec740d 100644 --- a/app/controllers/api/order_reserve/order_reservation_controller.rb +++ b/app/controllers/api/order_reserve/order_reservation_controller.rb @@ -70,7 +70,7 @@ class Api::OrderReserve::OrderReservationController < Api::ApiController order_reservation_id, flag = OrderReservation.addOrderReservationInfo(order_reservation) if !order_reservation_id.nil? && flag - shop = Shop.find_by_id(1) + shop = Shop.current_shop if !shop.nil? shop_code = shop.shop_code order_audio = DisplayImage.find_by_shop_id_and_name(shop.id, "order_audio") diff --git a/app/controllers/api/orders_controller.rb b/app/controllers/api/orders_controller.rb index bd2c3e18..a1e9ad9e 100755 --- a/app/controllers/api/orders_controller.rb +++ b/app/controllers/api/orders_controller.rb @@ -46,7 +46,7 @@ class Api::OrdersController < Api::ApiController @tax_profile = TaxProfile.where("lower(group_type)='cashier'") # end - @shop = Shop.first + @shop = Shop.current_shop puts "Hello world" puts @shop.to_json return @shop.to_json diff --git a/app/controllers/api/payment/mobilepayment_controller.rb b/app/controllers/api/payment/mobilepayment_controller.rb index 220cbbeb..53daa790 100644 --- a/app/controllers/api/payment/mobilepayment_controller.rb +++ b/app/controllers/api/payment/mobilepayment_controller.rb @@ -14,7 +14,7 @@ class Api::Payment::MobilepaymentController < Api::ApiController saleObj = Sale.find(sale_id) sale_items = SaleItem.get_all_sale_items(sale_id) - shop_detail = Shop.first + shop_detail = Shop.current_shop # rounding adjustment if !path.include? ("credit_payment") diff --git a/app/controllers/api/sound_effect_controller.rb b/app/controllers/api/sound_effect_controller.rb index 97dc3db5..f3126ca2 100644 --- a/app/controllers/api/sound_effect_controller.rb +++ b/app/controllers/api/sound_effect_controller.rb @@ -2,7 +2,7 @@ class Api::SoundEffectController < Api::ApiController #sound effect / alarm api for doemal side calling def sound_effect - shop = Shop.find_by_id(1) + shop = Shop.current_shop if !shop.nil? shop_code = shop.shop_code order_audio = DisplayImage.find_by_shop_id_and_name(shop.id, "order_audio") diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 66f20c55..81b4835d 100755 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,5 +1,5 @@ class ApplicationController < ActionController::Base - include LoginVerification + include LoginVerification, MultiTenancy #before_action :check_installation protect_from_forgery with: :exception diff --git a/app/controllers/base_controller.rb b/app/controllers/base_controller.rb index 1bf5b4d4..1bb0421e 100755 --- a/app/controllers/base_controller.rb +++ b/app/controllers/base_controller.rb @@ -1,5 +1,6 @@ class BaseController < ActionController::Base + include MultiTenancy layout "installation" protect_from_forgery with: :exception - + end diff --git a/app/controllers/base_crm_controller.rb b/app/controllers/base_crm_controller.rb index 00b5cf98..08bc8138 100755 --- a/app/controllers/base_crm_controller.rb +++ b/app/controllers/base_crm_controller.rb @@ -1,5 +1,5 @@ class BaseCrmController < ActionController::Base - include LoginVerification + include LoginVerification, layout "CRM" before_action :check_user diff --git a/app/controllers/base_inventory_controller.rb b/app/controllers/base_inventory_controller.rb index 8ee82777..bd455c33 100755 --- a/app/controllers/base_inventory_controller.rb +++ b/app/controllers/base_inventory_controller.rb @@ -1,5 +1,5 @@ class BaseInventoryController < ActionController::Base - include LoginVerification + include LoginVerification, MultiTenancy layout "inventory" before_action :check_user diff --git a/app/controllers/base_oqs_controller.rb b/app/controllers/base_oqs_controller.rb index 9b337b69..6e6a9c0f 100755 --- a/app/controllers/base_oqs_controller.rb +++ b/app/controllers/base_oqs_controller.rb @@ -1,5 +1,5 @@ class BaseOqsController < ActionController::Base - include LoginVerification + include LoginVerification, MultiTenancy layout "OQS" before_action :check_user diff --git a/app/controllers/base_origami_controller.rb b/app/controllers/base_origami_controller.rb index 6940a129..e9cddf05 100755 --- a/app/controllers/base_origami_controller.rb +++ b/app/controllers/base_origami_controller.rb @@ -1,5 +1,5 @@ class BaseOrigamiController < ActionController::Base - include LoginVerification + include LoginVerification, MultiTenancy layout "origami" before_action :check_user diff --git a/app/controllers/base_report_controller.rb b/app/controllers/base_report_controller.rb index 691ece34..b3d1d23a 100755 --- a/app/controllers/base_report_controller.rb +++ b/app/controllers/base_report_controller.rb @@ -1,5 +1,5 @@ class BaseReportController < ActionController::Base - include LoginVerification + include LoginVerification, MultiTenancy layout "application" before_action :check_user @@ -69,7 +69,7 @@ class BaseReportController < ActionController::Base from = from.beginning_of_day to = to.end_of_day - + return from, to end diff --git a/app/controllers/base_waiter_controller.rb b/app/controllers/base_waiter_controller.rb index 580de0f9..b1d2056c 100755 --- a/app/controllers/base_waiter_controller.rb +++ b/app/controllers/base_waiter_controller.rb @@ -1,5 +1,5 @@ class BaseWaiterController < ActionController::Base - include LoginVerification + include LoginVerification, MultiTenancy layout "waiter" before_action :check_user diff --git a/app/controllers/concerns/login_verification.rb b/app/controllers/concerns/login_verification.rb index 8eb719cb..b1102171 100755 --- a/app/controllers/concerns/login_verification.rb +++ b/app/controllers/concerns/login_verification.rb @@ -3,7 +3,7 @@ module LoginVerification included do before_action :authenticate_session_token - helper_method :current_company,:current_shop, :current_login_employee, :current_user, :get_cashier, :order_reservation, :bank_integration, :shop_detail + helper_method :current_company, :current_shop, :current_login_employee, :current_user, :get_cashier, :order_reservation, :bank_integration, :shop_detail end #this is base api base controller to need to inherit. @@ -19,7 +19,7 @@ module LoginVerification def current_shop begin - return Shop.first + return Shop.current_shop rescue return nil end @@ -41,7 +41,7 @@ module LoginVerification #Shop Name in Navbor def shop_detail - @shop = Shop.first + @shop = current_shop end #check order reservation used @@ -78,11 +78,11 @@ module LoginVerification protected # Authenticate the user with token based authentication - def authenticate - authenticate_session_token || render_unauthorized + def authenticate + authenticate_session_token || render_unauthorized end - def authenticate_session_token + def authenticate_session_token token = session[:session_token] if (token) #@current_user = User.find_by(api_key: token) diff --git a/app/controllers/concerns/multi_tenancy.rb b/app/controllers/concerns/multi_tenancy.rb new file mode 100644 index 00000000..5009e094 --- /dev/null +++ b/app/controllers/concerns/multi_tenancy.rb @@ -0,0 +1,20 @@ +module MultiTenancy + extend ActiveSupport::Concern + + included do + set_current_tenant_through_filter if respond_to? :set_current_tenant_through_filter + before_action :find_shop_by_subdomain_or_frist if respond_to? :before_action + helper_method :current_shop if respond_to? :helper_method + end + + private + def find_shop_by_subdomain_or_frist + if request.subdomain.present? + shop_code = request.subdomain.partition('-').last + shop = Shop.find_by(shop_code: shop_code) + else + shop = Shop.first + end + set_current_tenant(shop) + end +end diff --git a/app/controllers/crm/customers_controller.rb b/app/controllers/crm/customers_controller.rb index 2f846601..023b453c 100644 --- a/app/controllers/crm/customers_controller.rb +++ b/app/controllers/crm/customers_controller.rb @@ -82,7 +82,7 @@ class Crm::CustomersController < BaseCrmController @membership_types = Lookup.collection_of("member_group_type") # @taxes = TaxProfile.where(:group_type => 'cashier') - @taxes = TaxProfile.unscoped.select("id, (CONCAT(name,'(',(SELECT name FROM lookups WHERE lookup_type='tax_profiles' AND value=group_type),')')) as name") + @taxes = TaxProfile.unscope(:order).select("id, (CONCAT(name,'(',(SELECT name FROM lookups WHERE lookup_type='tax_profiles' AND value=group_type),')')) as name") .order("group_type ASC,order_by ASC") @filter = filter diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index a82a6483..18928fc3 100755 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -91,7 +91,7 @@ class HomeController < ApplicationController def dashboard @from, @to = get_date_range_from_params - @shop = Shop.first + @shop = Shop.current_shop @orders = Sale.receipt_date_between(@from, @to).where("payment_status = 'new' and sale_status = 'bill'") @sales = Sale.receipt_date_between(@from, @to).completed diff --git a/app/controllers/inventory/inventory_controller.rb b/app/controllers/inventory/inventory_controller.rb index a0324b15..d91e4176 100755 --- a/app/controllers/inventory/inventory_controller.rb +++ b/app/controllers/inventory/inventory_controller.rb @@ -26,6 +26,6 @@ class Inventory::InventoryController < BaseInventoryController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/inventory/inventory_definitions_controller.rb b/app/controllers/inventory/inventory_definitions_controller.rb index 01ca52b3..fca0bb07 100755 --- a/app/controllers/inventory/inventory_definitions_controller.rb +++ b/app/controllers/inventory/inventory_definitions_controller.rb @@ -106,7 +106,7 @@ class Inventory::InventoryDefinitionsController < BaseInventoryController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end private diff --git a/app/controllers/inventory/stock_check_items_controller.rb b/app/controllers/inventory/stock_check_items_controller.rb index 7a37f789..98fb0116 100755 --- a/app/controllers/inventory/stock_check_items_controller.rb +++ b/app/controllers/inventory/stock_check_items_controller.rb @@ -64,7 +64,7 @@ class Inventory::StockCheckItemsController < BaseInventoryController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end private diff --git a/app/controllers/inventory/stock_checks_controller.rb b/app/controllers/inventory/stock_checks_controller.rb index b7f7369d..05f7c70f 100755 --- a/app/controllers/inventory/stock_checks_controller.rb +++ b/app/controllers/inventory/stock_checks_controller.rb @@ -41,7 +41,7 @@ class Inventory::StockChecksController < BaseInventoryController member_info = nil unique_code = 'StockCheckPdf' - shop_details = current_shop + shop_details = Shop.current_shop checker = Employee.find(stockcheck.check_by) print_settings = PrintSetting.find_by_unique_code(unique_code) if !print_settings.nil? @@ -66,7 +66,7 @@ class Inventory::StockChecksController < BaseInventoryController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = current_shop + @shop = Shop.current_shop end # before_action :set_stock_check, only: [:show, :edit, :update, :destroy] diff --git a/app/controllers/inventory/stock_journals_controller.rb b/app/controllers/inventory/stock_journals_controller.rb index 11db2efd..9a737da0 100755 --- a/app/controllers/inventory/stock_journals_controller.rb +++ b/app/controllers/inventory/stock_journals_controller.rb @@ -64,7 +64,7 @@ class StockJournalsController < ApplicationController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end private diff --git a/app/controllers/oqs/edit_controller.rb b/app/controllers/oqs/edit_controller.rb index c6e130ec..e2499fbb 100644 --- a/app/controllers/oqs/edit_controller.rb +++ b/app/controllers/oqs/edit_controller.rb @@ -85,6 +85,6 @@ class Oqs::EditController < BaseOqsController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/alipay_controller.rb b/app/controllers/origami/alipay_controller.rb index 8c5f4884..3578724f 100644 --- a/app/controllers/origami/alipay_controller.rb +++ b/app/controllers/origami/alipay_controller.rb @@ -11,7 +11,7 @@ class Origami::AlipayController < BaseOrigamiController end total = 0 @alipaycount = 0 - @shop = Shop.first + @shop = Shop.current_shop @rounding_adj = 0 @can_alipay = 0 @member_discount = 0 @@ -64,7 +64,7 @@ class Origami::AlipayController < BaseOrigamiController ref_no = params[:ref_no] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj @@ -88,6 +88,6 @@ class Origami::AlipayController < BaseOrigamiController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/credit_payments_controller.rb b/app/controllers/origami/credit_payments_controller.rb index 05faf4f7..3e9f2bd3 100755 --- a/app/controllers/origami/credit_payments_controller.rb +++ b/app/controllers/origami/credit_payments_controller.rb @@ -9,7 +9,7 @@ class Origami::CreditPaymentsController < BaseOrigamiController @creditcount = 0 others = 0 - @shop = Shop.first + @shop = Shop.current_shop if @shop.is_rounding_adj new_total = Sale.get_rounding_adjustment(sale_data.grand_total) else @@ -32,7 +32,7 @@ class Origami::CreditPaymentsController < BaseOrigamiController sale_id = params[:sale_id] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj diff --git a/app/controllers/origami/credit_sales_controller.rb b/app/controllers/origami/credit_sales_controller.rb index 8f43edda..587b22dd 100644 --- a/app/controllers/origami/credit_sales_controller.rb +++ b/app/controllers/origami/credit_sales_controller.rb @@ -3,11 +3,11 @@ class Origami::CreditSalesController < BaseOrigamiController @cashier_type = 'cashier' @webview = false if check_mobile - @webview = true + @webview = true end - - @tables = Table.unscoped.all.active.order('status desc') - @rooms = Room.unscoped.all.active.order('status desc') + + @tables = Table.unscope(:order).all.active.order('status desc') + @rooms = Room.unscope(:order).all.active.order('status desc') @complete = Sale.where("DATE_FORMAT(created_at,'%Y-%m-%d') = ? and sale_status != 'new'",DateTime.now.strftime('%Y-%m-%d')) @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @customers = Customer.pluck("customer_id, name") @@ -15,7 +15,7 @@ class Origami::CreditSalesController < BaseOrigamiController @sale = Sale.find_by_sale_id(params[:sale_id]) @sale_payment = SalePayment.select("SUM(payment_amount) as payment_amount") .where("sale_id = ? and payment_method=?", @sale.sale_id, "creditnote") - + @sale_taxes = [] sale_taxes = SaleTax.where("sale_id = ?", @sale.sale_id) if !sale_taxes.empty? @@ -24,5 +24,5 @@ class Origami::CreditSalesController < BaseOrigamiController end end end - + end diff --git a/app/controllers/origami/customers_controller.rb b/app/controllers/origami/customers_controller.rb index 97f35339..b77137a9 100644 --- a/app/controllers/origami/customers_controller.rb +++ b/app/controllers/origami/customers_controller.rb @@ -87,7 +87,7 @@ class Origami::CustomersController < BaseOrigamiController @count_customer = Customer.count_customer # @taxes = TaxProfile.where(:group_type => 'cashier') - @taxes = TaxProfile.unscoped.select("id, (CONCAT(name,'(',(SELECT name FROM lookups WHERE lookup_type='tax_profiles' AND value=group_type),')')) as name") + @taxes = TaxProfile.unscope(:order).select("id, (CONCAT(name,'(',(SELECT name FROM lookups WHERE lookup_type='tax_profiles' AND value=group_type),')')) as name") .order("group_type ASC,order_by ASC") # if flash["errors"] # @crm_customer.valid? diff --git a/app/controllers/origami/dashboard_controller.rb b/app/controllers/origami/dashboard_controller.rb index 43c79179..4ff6e8b3 100644 --- a/app/controllers/origami/dashboard_controller.rb +++ b/app/controllers/origami/dashboard_controller.rb @@ -1,7 +1,7 @@ class Origami::DashboardController < BaseOrigamiController def index - @shop = Shop.first + @shop = Shop.current_shop @display_type = Lookup.find_by_lookup_type("display_type") @sale_data = Array.new diff --git a/app/controllers/origami/dinga_controller.rb b/app/controllers/origami/dinga_controller.rb index 01e35004..9754b81d 100644 --- a/app/controllers/origami/dinga_controller.rb +++ b/app/controllers/origami/dinga_controller.rb @@ -6,7 +6,7 @@ class Origami::DingaController < BaseOrigamiController @membership_rebate_balance=0 @sale_data = Sale.find_by_sale_id(@sale_id) @receipt_no = @sale_data.receipt_no - @shop = Shop.first + @shop = Shop.current_shop if @shop.is_rounding_adj new_total = Sale.get_rounding_adjustment(@sale_data.grand_total) else @@ -77,7 +77,7 @@ def create account_no = params[:account_no] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj # new_total = Sale.get_rounding_adjustment(saleObj.grand_total) diff --git a/app/controllers/origami/gift_voucher_controller.rb b/app/controllers/origami/gift_voucher_controller.rb index 572e248e..7ad78065 100644 --- a/app/controllers/origami/gift_voucher_controller.rb +++ b/app/controllers/origami/gift_voucher_controller.rb @@ -6,7 +6,7 @@ class Origami::GiftVoucherController < BaseOrigamiController sale_data = Sale.find_by_sale_id(@sale_id) total = 0 @gift_vouchercount = 0 - @shop = Shop.first + @shop = Shop.current_shop @rounding_adj = 0 @can_gift_voucher = 0 @member_discount = 0 @@ -48,7 +48,7 @@ class Origami::GiftVoucherController < BaseOrigamiController ref_no = params[:reference_no] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj @@ -66,6 +66,6 @@ class Origami::GiftVoucherController < BaseOrigamiController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/home_controller.rb b/app/controllers/origami/home_controller.rb index fe074210..30a6ce92 100755 --- a/app/controllers/origami/home_controller.rb +++ b/app/controllers/origami/home_controller.rb @@ -4,8 +4,8 @@ class Origami::HomeController < BaseOrigamiController def index @webview = check_mobile - @tables = Table.unscoped.all.active.order('status desc') - @rooms = Room.unscoped.all.active.order('status desc') + @tables = Table.unscope(:order).all.active.order('status desc') + @rooms = Room.unscope(:order).all.active.order('status desc') @complete = Sale.completed_sale("cashier") @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @@ -21,8 +21,8 @@ class Origami::HomeController < BaseOrigamiController @print_settings = PrintSetting.get_precision_delimiter() @webview = check_mobile - @tables = Table.unscoped.all.active.order('status desc') - @rooms = Room.unscoped.all.active.order('status desc') + @tables = Table.unscope(:order).all.active.order('status desc') + @rooms = Room.unscope(:order).all.active.order('status desc') @complete = Sale.completed_sale("cashier") @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @customers = Customer.pluck("customer_id, name") @@ -126,7 +126,7 @@ class Origami::HomeController < BaseOrigamiController lookup_edit_order = Lookup.collection_of('edit_order') if !lookup_edit_order.empty? lookup_edit_order.each do |edit_order| - if edit_order[0].downcase == "editorderorigami" + if edit_order[0].downcase == "editorderorigami" if edit_order[1] == '0' && (current_login_employee.role == 'cashier' || current_login_employee.role == 'waiter') @edit_order_origami = false end @@ -139,14 +139,14 @@ class Origami::HomeController < BaseOrigamiController lookup_changable_tax = Lookup.collection_of('changable_tax') if !lookup_changable_tax.empty? lookup_changable_tax.each do |changable_tax| - if changable_tax[0].downcase == "change" - if changable_tax[1] == '0' + if changable_tax[0].downcase == "change" + if changable_tax[1] == '0' @changable_tax = false end end end end - + end def check_emp_access_code diff --git a/app/controllers/origami/jcb_controller.rb b/app/controllers/origami/jcb_controller.rb index 1f979adc..3a64b8a0 100644 --- a/app/controllers/origami/jcb_controller.rb +++ b/app/controllers/origami/jcb_controller.rb @@ -12,7 +12,7 @@ class Origami::JcbController < BaseOrigamiController end total = 0 @jcbcount = 0 - @shop = Shop.first + @shop = Shop.current_shop @rounding_adj = 0 @can_jcb = 0 @member_discount= 0 @@ -66,7 +66,7 @@ class Origami::JcbController < BaseOrigamiController ref_no = params[:ref_no] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj @@ -89,6 +89,6 @@ class Origami::JcbController < BaseOrigamiController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/junction_pay_controller.rb b/app/controllers/origami/junction_pay_controller.rb index c77c2655..1b416c6a 100644 --- a/app/controllers/origami/junction_pay_controller.rb +++ b/app/controllers/origami/junction_pay_controller.rb @@ -11,7 +11,7 @@ class Origami::JunctionPayController < BaseOrigamiController @cashier_id = current_user.emp_id @payment_method_setting_nav = PaymentMethodSetting.all - @shop = Shop.first + @shop = Shop.current_shop if @shop.is_rounding_adj new_total = Sale.get_rounding_adjustment(sale_data.grand_total) else @@ -52,7 +52,7 @@ class Origami::JunctionPayController < BaseOrigamiController if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj diff --git a/app/controllers/origami/master_controller.rb b/app/controllers/origami/master_controller.rb index 15edb703..f36b86f0 100644 --- a/app/controllers/origami/master_controller.rb +++ b/app/controllers/origami/master_controller.rb @@ -12,7 +12,7 @@ class Origami::MasterController < BaseOrigamiController end total = 0 @mastercount = 0 - @shop = Shop.first + @shop = Shop.current_shop @rounding_adj = 0 @can_master = 0 @member_discount = 0 @@ -63,7 +63,7 @@ class Origami::MasterController < BaseOrigamiController ref_no = params[:ref_no] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj @@ -87,6 +87,6 @@ class Origami::MasterController < BaseOrigamiController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/movetable_controller.rb b/app/controllers/origami/movetable_controller.rb index 41c58941..86680c6e 100755 --- a/app/controllers/origami/movetable_controller.rb +++ b/app/controllers/origami/movetable_controller.rb @@ -105,7 +105,7 @@ class Origami::MovetableController < BaseOrigamiController # @type = (DiningFacility.find(change_to)).type # @moved_by = @current_user.name # @date = DateTime.now - # @shop = Shop.first + # @shop = Shop.current_shop # unique_code = "MoveTablePdf" # pdf_no = PrintSetting.where(:unique_code => unique_code).count # #print_settings = PrintSetting.find_by_unique_code(unique_code) diff --git a/app/controllers/origami/mpu_controller.rb b/app/controllers/origami/mpu_controller.rb index 220219c3..1a7743c1 100644 --- a/app/controllers/origami/mpu_controller.rb +++ b/app/controllers/origami/mpu_controller.rb @@ -11,7 +11,7 @@ class Origami::MpuController < BaseOrigamiController end total = 0 @mpucount = 0 - @shop = Shop.first + @shop = Shop.current_shop @rounding_adj = 0 @can_mpu = 0 @member_discount = 0 @@ -64,7 +64,7 @@ class Origami::MpuController < BaseOrigamiController ref_no = params[:ref_no] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj @@ -87,6 +87,6 @@ class Origami::MpuController < BaseOrigamiController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/order_reservation_controller.rb b/app/controllers/origami/order_reservation_controller.rb index 3fdeee25..508bf483 100644 --- a/app/controllers/origami/order_reservation_controller.rb +++ b/app/controllers/origami/order_reservation_controller.rb @@ -4,7 +4,7 @@ class Origami::OrderReservationController < BaseOrigamiController @order = OrderReservation.latest_order #.active @count_on_order = OrderReservation.get_count_on_order @count_on_completed = OrderReservation.get_count_on_completed - @shop = Shop.find_by_id(1) + @shop = Shop.current_shop @receipt_bill = check_receipt_bill end diff --git a/app/controllers/origami/orders_controller.rb b/app/controllers/origami/orders_controller.rb index 5f34d9a3..2a7c9aa3 100755 --- a/app/controllers/origami/orders_controller.rb +++ b/app/controllers/origami/orders_controller.rb @@ -5,8 +5,8 @@ class Origami::OrdersController < BaseOrigamiController @webview = true end - @tables = Table.unscoped.all.active.order('status desc') - @rooms = Room.unscoped.all.active.order('status desc') + @tables = Table.unscope(:order).all.active.order('status desc') + @rooms = Room.unscope(:order).all.active.order('status desc') @complete = Sale.where("DATE_FORMAT(created_at,'%Y-%m-%d') = ? and sale_status != 'new'",DateTime.now.strftime('%Y-%m-%d')) @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @order = Order.find(params[:order_id]) diff --git a/app/controllers/origami/paymal_controller.rb b/app/controllers/origami/paymal_controller.rb index 36c19327..cfabd2b5 100644 --- a/app/controllers/origami/paymal_controller.rb +++ b/app/controllers/origami/paymal_controller.rb @@ -6,7 +6,7 @@ class Origami::PaymalController < BaseOrigamiController @membership_rebate_balance=0 sale_data = Sale.find_by_sale_id(@sale_id) @receipt_no = sale_data.receipt_no - @shop = Shop.first + @shop = Shop.current_shop if @shop.is_rounding_adj new_total = Sale.get_rounding_adjustment(sale_data.grand_total) else @@ -75,7 +75,7 @@ def create puts params.to_json if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj diff --git a/app/controllers/origami/payments_controller.rb b/app/controllers/origami/payments_controller.rb index c6c61602..401e231b 100755 --- a/app/controllers/origami/payments_controller.rb +++ b/app/controllers/origami/payments_controller.rb @@ -59,7 +59,7 @@ class Origami::PaymentsController < BaseOrigamiController end #shop detail - ## shop_detail = Shop.first + ## shop_detail = Shop.current_shop # customer= Customer.where('customer_id=' +.customer_id) customer = Customer.find(sale_data.customer_id) # rounding adjustment @@ -141,7 +141,7 @@ class Origami::PaymentsController < BaseOrigamiController if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) sale_items = SaleItem.get_all_sale_items(sale_id) - #shop_detail = Shop.first + #shop_detail = Shop.current_shop # rounding adjustment if !path.include? ("credit_payment") if shop_detail.is_rounding_adj @@ -577,7 +577,7 @@ class Origami::PaymentsController < BaseOrigamiController customer= Customer.find(saleObj.customer_id) #shop detail - #shop_detail = Shop.first + #shop_detail = Shop.current_shop # get member information rebate = MembershipSetting.find_by_rebate(1) if customer.membership_id != nil && rebate @@ -686,7 +686,7 @@ class Origami::PaymentsController < BaseOrigamiController customer= Customer.find(saleObj.customer_id) #shop detail - #shop_detail = Shop.first + #shop_detail = Shop.current_shop printer = PrintSetting.all unique_code="ReceiptBillPdf" diff --git a/app/controllers/origami/paypar_payments_controller.rb b/app/controllers/origami/paypar_payments_controller.rb index fbcd348c..f2fb3c7b 100755 --- a/app/controllers/origami/paypar_payments_controller.rb +++ b/app/controllers/origami/paypar_payments_controller.rb @@ -7,7 +7,7 @@ class Origami::PayparPaymentsController < BaseOrigamiController payment_method = "paypar" if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment if shop_details.is_rounding_adj diff --git a/app/controllers/origami/redeem_payments_controller.rb b/app/controllers/origami/redeem_payments_controller.rb index c0edf879..0d1836c0 100755 --- a/app/controllers/origami/redeem_payments_controller.rb +++ b/app/controllers/origami/redeem_payments_controller.rb @@ -6,7 +6,7 @@ class Origami::RedeemPaymentsController < BaseOrigamiController @membership_rebate_balance=0 sale_data = Sale.find_by_sale_id(@sale_id) - @shop = Shop.first + @shop = Shop.current_shop if @shop.is_rounding_adj new_total = Sale.get_rounding_adjustment(sale_data.grand_total) else diff --git a/app/controllers/origami/request_bills_controller.rb b/app/controllers/origami/request_bills_controller.rb index 6d36f319..69a316f5 100755 --- a/app/controllers/origami/request_bills_controller.rb +++ b/app/controllers/origami/request_bills_controller.rb @@ -90,7 +90,7 @@ class Origami::RequestBillsController < ApplicationController # Not Use for these printed bill cannot give customer # unique_code = "ReceiptBillPdf" # #shop detail - # shop_details = Shop.find(1) + # shop_details = Shop.current_shop # # customer= Customer.where('customer_id=' +.customer_id) # customer= Customer.find(@sale_data.customer_id) # # get member information diff --git a/app/controllers/origami/rooms_controller.rb b/app/controllers/origami/rooms_controller.rb index 80eb5641..c94c5c18 100755 --- a/app/controllers/origami/rooms_controller.rb +++ b/app/controllers/origami/rooms_controller.rb @@ -1,7 +1,7 @@ class Origami::RoomsController < BaseOrigamiController def index - @tables = Table.unscoped.all.active.order('status desc') - @rooms = Room.unscoped.all.active.order('status desc') + @tables = Table.unscope(:order).all.active.order('status desc') + @rooms = Room.unscope(:order).all.active.order('status desc') @complete = Sale.completed_sale("cashier") @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @shift = ShiftSale.current_open_shift(current_user.id) @@ -17,8 +17,8 @@ class Origami::RoomsController < BaseOrigamiController @webview = true end - @tables = Table.unscoped.all.active.order('status desc') - @rooms = Room.unscoped.all.active.order('status desc') + @tables = Table.unscope(:order).all.active.order('status desc') + @rooms = Room.unscope(:order).all.active.order('status desc') @complete = Sale.completed_sale("cashier") @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @customers = Customer.pluck("customer_id, name") @@ -29,7 +29,7 @@ class Origami::RoomsController < BaseOrigamiController @status_sale = "" @sale_array = Array.new - @shop = Shop.first + @shop = Shop.current_shop @membership = MembershipSetting::MembershipSetting @payment_methods = PaymentMethodSetting.all diff --git a/app/controllers/origami/sales_controller.rb b/app/controllers/origami/sales_controller.rb index d2af3258..98bbd288 100755 --- a/app/controllers/origami/sales_controller.rb +++ b/app/controllers/origami/sales_controller.rb @@ -5,8 +5,8 @@ class Origami::SalesController < BaseOrigamiController @webview = true end - @tables = Table.unscoped.all.active.order('status desc') - @rooms = Room.unscoped.all.active.order('status desc') + @tables = Table.unscope(:order).all.active.order('status desc') + @rooms = Room.unscope(:order).all.active.order('status desc') @complete = Sale.completed_sale("cashier") @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @customers = Customer.pluck("customer_id, name") diff --git a/app/controllers/origami/second_display_controller.rb b/app/controllers/origami/second_display_controller.rb index 21c0674d..392b85e6 100644 --- a/app/controllers/origami/second_display_controller.rb +++ b/app/controllers/origami/second_display_controller.rb @@ -27,7 +27,7 @@ class Origami::SecondDisplayController < BaseOrigamiController #Shop Name in Navbor # helper_method :shop_detail # def shop_detail - # @shop = Shop.first + # @shop = Shop.current_shop # end diff --git a/app/controllers/origami/split_bill_controller.rb b/app/controllers/origami/split_bill_controller.rb index fb6db35f..12a232a6 100755 --- a/app/controllers/origami/split_bill_controller.rb +++ b/app/controllers/origami/split_bill_controller.rb @@ -413,7 +413,7 @@ class Origami::SplitBillController < BaseOrigamiController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/table_invoices_controller.rb b/app/controllers/origami/table_invoices_controller.rb index 7082e44c..e3f9f0ab 100755 --- a/app/controllers/origami/table_invoices_controller.rb +++ b/app/controllers/origami/table_invoices_controller.rb @@ -1,7 +1,7 @@ class Origami::TableInvoicesController < BaseOrigamiController def index @table = DiningFacility.find(params[:table_id]) - shop = Shop.first + shop = Shop.current_shop puts "table bookig lenght" @sale_array = Array.new @table.bookings.each do |booking| @@ -34,7 +34,7 @@ class Origami::TableInvoicesController < BaseOrigamiController @table = DiningFacility.find(params[:table_id]) @membership = MembershipSetting::MembershipSetting @payment_methods = PaymentMethodSetting.all - shop = Shop.first + shop = Shop.current_shop @sale_array = Array.new @table.bookings.each do |booking| if booking.sale_id.nil? diff --git a/app/controllers/origami/unionpay_controller.rb b/app/controllers/origami/unionpay_controller.rb index b351d40a..23587ca0 100644 --- a/app/controllers/origami/unionpay_controller.rb +++ b/app/controllers/origami/unionpay_controller.rb @@ -11,7 +11,7 @@ class Origami::UnionpayController < BaseOrigamiController end total = 0 @unionpaycount = 0 - @shop = Shop.first + @shop = Shop.current_shop @rounding_adj = 0 @can_unionpay = 0 @member_discount = 0 @@ -61,7 +61,7 @@ class Origami::UnionpayController < BaseOrigamiController ref_no = params[:ref_no] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj @@ -85,6 +85,6 @@ class Origami::UnionpayController < BaseOrigamiController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/visa_controller.rb b/app/controllers/origami/visa_controller.rb index c50339e4..6eb11be5 100644 --- a/app/controllers/origami/visa_controller.rb +++ b/app/controllers/origami/visa_controller.rb @@ -11,7 +11,7 @@ class Origami::VisaController < BaseOrigamiController end total = 0 @visacount = 0 - @shop = Shop.first + @shop = Shop.current_shop @rounding_adj = 0 @can_visa = 0 @member_discount = 0 @@ -61,7 +61,7 @@ class Origami::VisaController < BaseOrigamiController ref_no = params[:ref_no] if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment # if shop_details.is_rounding_adj @@ -85,6 +85,6 @@ class Origami::VisaController < BaseOrigamiController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/origami/void_controller.rb b/app/controllers/origami/void_controller.rb index 5352b7c3..7fb54825 100755 --- a/app/controllers/origami/void_controller.rb +++ b/app/controllers/origami/void_controller.rb @@ -116,7 +116,7 @@ class Origami::VoidController < BaseOrigamiController customer= Customer.find(sale.customer_id) #shop detail - shop_details = current_shop + shop_details = Shop.current_shop # get member information rebate = MembershipSetting.find_by_rebate(1) if customer.membership_id != nil && rebate diff --git a/app/controllers/origami/voucher_controller.rb b/app/controllers/origami/voucher_controller.rb index e512a48b..1b79cb49 100755 --- a/app/controllers/origami/voucher_controller.rb +++ b/app/controllers/origami/voucher_controller.rb @@ -8,7 +8,7 @@ class Origami::VoucherController < BaseOrigamiController @vouchercount = 0 others = 0 - @shop = Shop.first + @shop = Shop.current_shop if @shop.is_rounding_adj new_total = Sale.get_rounding_adjustment(sale_data.grand_total) else diff --git a/app/controllers/origami/waste_spoile_controller.rb b/app/controllers/origami/waste_spoile_controller.rb index 6a68a2b9..ba0846ee 100755 --- a/app/controllers/origami/waste_spoile_controller.rb +++ b/app/controllers/origami/waste_spoile_controller.rb @@ -89,7 +89,7 @@ class Origami::WasteSpoileController < BaseOrigamiController customer= Customer.find(sale.customer_id) #shop detail - shop_details = current_shop + shop_details = Shop.current_shop # get member information rebate = MembershipSetting.find_by_rebate(1) if customer.membership_id != nil && rebate diff --git a/app/controllers/reports/product_sale_controller.rb b/app/controllers/reports/product_sale_controller.rb index 9791545e..61f17396 100644 --- a/app/controllers/reports/product_sale_controller.rb +++ b/app/controllers/reports/product_sale_controller.rb @@ -22,6 +22,6 @@ class Reports::ProductSaleController < BaseReportController #Shop Name in Navbor helper_method :shop_detail def shop_detail - @shop = Shop.first + @shop = Shop.current_shop end end diff --git a/app/controllers/reports/receipt_no_controller.rb b/app/controllers/reports/receipt_no_controller.rb index eeff4bf0..1136bc31 100755 --- a/app/controllers/reports/receipt_no_controller.rb +++ b/app/controllers/reports/receipt_no_controller.rb @@ -183,7 +183,7 @@ authorize_resource :class => false customer= Customer.find(saleObj.customer_id) #shop detail - #shop_detail = Shop.first + #shop_detail = Shop.current_shop # get member information rebate = MembershipSetting.find_by_rebate(1) if customer.membership_id != nil && rebate diff --git a/app/controllers/settings/shops_controller.rb b/app/controllers/settings/shops_controller.rb index 598e4f9b..9e902dad 100644 --- a/app/controllers/settings/shops_controller.rb +++ b/app/controllers/settings/shops_controller.rb @@ -59,11 +59,11 @@ class Settings::ShopsController < ApplicationController File.delete(delete_path) end end - save_path = Rails.root.join("public/#{current_shop.shop_code}_#{a.original_filename}") + save_path = Rails.root.join("public/#{Shop.current_shop.shop_code}_#{a.original_filename}") File.open(save_path, 'wb') do |f| f.write a.read end - audio_name = "#{current_shop.shop_code}_#{a.original_filename}" + audio_name = "#{Shop.current_shop.shop_code}_#{a.original_filename}" @settings_shop.display_images.where(:name => "order_audio").destroy_all @display_image = @settings_shop.display_images.create!(:shop_id => @shop.id, :name => "order_audio", :image => audio_name) else diff --git a/app/controllers/transactions/sales_controller.rb b/app/controllers/transactions/sales_controller.rb index 83efc401..661b42e9 100755 --- a/app/controllers/transactions/sales_controller.rb +++ b/app/controllers/transactions/sales_controller.rb @@ -346,7 +346,7 @@ class Transactions::SalesController < ApplicationController customer= Customer.find(sale.customer_id) #shop detail - shop_details = Shop.find_by_id(1) + shop_details = Shop.current_shop # get member information rebate = MembershipSetting.find_by_rebate(1) if customer.membership_id != nil && rebate diff --git a/app/models/application_record.rb b/app/models/application_record.rb index 10a4cba8..590cdf8d 100755 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -1,3 +1,14 @@ class ApplicationRecord < ActiveRecord::Base self.abstract_class = true + + def self.inherited(subclass) + super + + return unless subclass.superclass == self + return unless subclass.column_names.include? 'shop_id' + + subclass.class_eval do + acts_as_tenant(:shop) + end + end end diff --git a/app/models/kbz_pay.rb b/app/models/kbz_pay.rb index 5893e048..523a7fc5 100644 --- a/app/models/kbz_pay.rb +++ b/app/models/kbz_pay.rb @@ -3,13 +3,13 @@ class KbzPay KBZ_PAY = 'KBZPay' def self.pay(amount, receipt_no, url, key, app_id, code) - shop = Shop.first + shop = Shop.current_shop prefix = shop.shop_code receipt_no = "#{prefix}#{receipt_no}" datetime = DateTime.now.strftime("%d%m%Y%H%M") kbz_app_id = app_id - kbz_merch_code = code + kbz_merch_code = code kbz_api_key = key kbz_provider_url = "#{url}/precreate" @@ -58,17 +58,17 @@ class KbzPay # Rails.logger.debug result['Response'] return false, result['Response'] end - + end def self.query(receipt_no, current_user, url, key, app_id, code) - shop = Shop.first + shop = Shop.current_shop prefix = shop.shop_code receipt_no = "#{prefix}#{receipt_no}" amount = 0 datetime = DateTime.now.strftime("%d%m%Y%H%M") kbz_app_id = app_id - kbz_merch_code = code + kbz_merch_code = code kbz_api_key = key kbz_provider_url = "#{url}/queryorder" @@ -122,7 +122,7 @@ class KbzPay # return true, "successfully paid by KBZ PAY" elsif result['Response']['trade_status'] == "PAY_FAILED" - + # return false, "pay failed by KBZ PAY" elsif result['Response']['trade_status'] == "WAIT_PAY" # return false , "Waiting to pay by KBZ PAY" @@ -135,4 +135,4 @@ class KbzPay return amount end -end \ No newline at end of file +end diff --git a/app/models/menu.rb b/app/models/menu.rb index a825cc7b..1dd0aaed 100755 --- a/app/models/menu.rb +++ b/app/models/menu.rb @@ -141,7 +141,7 @@ class Menu < ApplicationRecord end else # Menu by Menu Import - @shop = Shop.first + @shop = Shop.current_shop shop_code = "" if !@shop.nil? if @shop.shop_code diff --git a/app/models/order_queue_station.rb b/app/models/order_queue_station.rb index 147ebdc4..6d8830f8 100755 --- a/app/models/order_queue_station.rb +++ b/app/models/order_queue_station.rb @@ -297,7 +297,7 @@ class OrderQueueStation < ApplicationRecord @type = (DiningFacility.find(change_to)).type @moved_by = current_user @date = DateTime.now - @shop = Shop.first + @shop = Shop.current_shop unique_code = "MoveTablePdf" # pdf_no = PrintSetting.where(:unique_code => unique_code).count print_settings = PrintSetting.find_by_unique_code(unique_code) diff --git a/app/models/order_reservation.rb b/app/models/order_reservation.rb index 8de88ee2..60c33d2e 100644 --- a/app/models/order_reservation.rb +++ b/app/models/order_reservation.rb @@ -157,7 +157,7 @@ class OrderReservation < ApplicationRecord def self.update_doemal_payment(order,current_user,receipt_bill) if(Sale.exists?(order.sale_id)) saleObj = Sale.find(order.sale_id) - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment if shop_details.is_rounding_adj a = saleObj.grand_total % 25 # Modulus @@ -194,7 +194,7 @@ class OrderReservation < ApplicationRecord shift = ShiftSale.find(saleObj.shift_sale_id) cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id) - shop_detail = Shop.first + shop_detail = Shop.current_shop order_reservation = OrderReservation.get_order_reservation_info(saleObj.sale_id) if !cashier_terminal.nil? # Calculate Food and Beverage Total @@ -400,7 +400,7 @@ class OrderReservation < ApplicationRecord end def self.check_new_order - shop = Shop.find_by_id(1) + shop = Shop.current_shop if !shop.shop_code.nil? shop_code = shop.shop_code else @@ -418,7 +418,7 @@ class OrderReservation < ApplicationRecord end def self.check_order_send_to_kitchen - shop = Shop.find_by_id(1) + shop = Shop.current_shop if !shop.shop_code.nil? shop_code = shop.shop_code else @@ -436,7 +436,7 @@ class OrderReservation < ApplicationRecord end def self.check_order_ready_to_delivery - shop = Shop.find_by_id(1) + shop = Shop.current_shop if !shop.shop_code.nil? shop_code = shop.shop_code else diff --git a/app/models/printer/order_queue_printer.rb b/app/models/printer/order_queue_printer.rb index ed14d884..5d72773c 100755 --- a/app/models/printer/order_queue_printer.rb +++ b/app/models/printer/order_queue_printer.rb @@ -38,7 +38,7 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker end # end - shop = Shop.first + shop = Shop.current_shop directory_name = 'public/orders_'+shop.shop_code Dir.mkdir(directory_name) unless File.exists?(directory_name) @@ -80,7 +80,7 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker print_setting = PrintSetting.all.order("id ASC") order=print_query('order_summary', order_id) - shop = Shop.first + shop = Shop.current_shop directory_name = 'public/orders_'+shop.shop_code Dir.mkdir(directory_name) unless File.exists?(directory_name) @@ -192,7 +192,7 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker order=print_query('booking_summary', booking_id) - shop = Shop.first + shop = Shop.current_shop directory_name = 'public/orders_'+shop.shop_code Dir.mkdir(directory_name) unless File.exists?(directory_name) diff --git a/app/models/room.rb b/app/models/room.rb index 87f232e9..63c548ec 100755 --- a/app/models/room.rb +++ b/app/models/room.rb @@ -1,4 +1,3 @@ class Room < DiningFacility - has_many :bookings, :foreign_key => 'dining_facility_id' end diff --git a/app/models/sale.rb b/app/models/sale.rb index 85a81950..59d3683b 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -440,7 +440,7 @@ class Sale < ApplicationRecord #compute - invoice total def compute_by_sale_items(total_discount, discount_type=nil, order_source=nil, tax_type=nil, type=nil) - shop = Shop.first + shop = Shop.current_shop #Computation Fields subtotal_price = 0 @@ -507,7 +507,7 @@ class Sale < ApplicationRecord # Tax Re-Calculte def compute_tax(total_taxable, total_discount = 0, order_source = nil, tax_type=nil) - shop = Shop.first + shop = Shop.current_shop #if tax is not apply create new record # SaleTax.where("sale_id='#{sale.sale_id}'").find_each do |existing_tax| @@ -627,7 +627,7 @@ class Sale < ApplicationRecord # Tax Calculate def apply_tax(total_taxable, order_source = nil, tax_type = nil) - shop = Shop.first + shop = Shop.current_shop #if tax is not apply create new record # SaleTax.where("sale_id='#{self.sale_id}'").find_each do |existing_tax| @@ -645,7 +645,7 @@ class Sale < ApplicationRecord order_source = "cashier" end - # tax_data = TaxProfile.unscoped.where("group_type=?",order_source).pluck(:id) + # tax_data = TaxProfile.unscope(:order).where("group_type=?",order_source).pluck(:id) # customer = Customer.find(self.customer_id).tax_profiles tax_profiles = unique_tax_profiles(order_source, self.customer_id) @@ -710,7 +710,7 @@ class Sale < ApplicationRecord end def adjust_rounding - shop_details = Shop.first + shop_details = Shop.current_shop # rounding adjustment if shop_details.is_rounding_adj new_total = Sale.get_rounding_adjustment(self.grand_total) @@ -726,7 +726,7 @@ class Sale < ApplicationRecord #Generate new Receipt No when it is not assigned def generate_receipt_no #shop_code and client_code - shop_details = Shop.first + shop_details = Shop.current_shop #Date-Shift- if self.receipt_no.nil? prefix = DateTime.now().utc @@ -1239,7 +1239,7 @@ end #product sale report query def self.get_menu_item_query(order_by) - query = MenuItem.unscoped.select("acc.id as account_id, + query = MenuItem.unscope(:order).select("acc.id as account_id, acc.title as account_name, mii.item_instance_code as item_code, " + "(CASE WHEN si.qty IS NOT NULL THEN SUM(si.qty) ELSE 0 END) as total_item," + diff --git a/app/models/shop.rb b/app/models/shop.rb index 75c30dd7..41110515 100755 --- a/app/models/shop.rb +++ b/app/models/shop.rb @@ -1,13 +1,17 @@ class Shop < ApplicationRecord - #ShopDetail = Shop.find_by_id(1) + #ShopDetail = Shop.current_shop # Shop Image Uploader - mount_uploader :logo, ShopImageUploader + mount_uploader :logo, ShopImageUploader - has_many :display_images + has_many :display_images accepts_nested_attributes_for :display_images def file_data=(input_data) self.data = input_data.read end + + def self.current_shop + ActsAsTenant.current_tenant + end end diff --git a/app/uploaders/commissioner_image_uploader.rb b/app/uploaders/commissioner_image_uploader.rb index 9b65e4a8..42e90a16 100644 --- a/app/uploaders/commissioner_image_uploader.rb +++ b/app/uploaders/commissioner_image_uploader.rb @@ -20,11 +20,11 @@ class CommissionerImageUploader < CarrierWave::Uploader::Base end def filename - if Shop.first.shop_code.nil? - "#{original_filename}" if original_filename.present? + if Shop.current_shop.shop_code.nil? + "#{original_filename}" if original_filename.present? else - "#{Shop.first.shop_code}_#{original_filename}" if original_filename.present? - end + "#{Shop.current_shop.shop_code}_#{original_filename}" if original_filename.present? + end end # def cache_dir @@ -62,6 +62,6 @@ class CommissionerImageUploader < CarrierWave::Uploader::Base # Avoid using model.id or version_name here, see uploader/store.rb for details. # def filename # "something.jpg" if original_filename - # end + # end -end \ No newline at end of file +end diff --git a/app/uploaders/customer_image_uploader.rb b/app/uploaders/customer_image_uploader.rb index be1326d6..77a133af 100644 --- a/app/uploaders/customer_image_uploader.rb +++ b/app/uploaders/customer_image_uploader.rb @@ -20,11 +20,11 @@ class CustomerImageUploader < CarrierWave::Uploader::Base end def filename - if Shop.first.shop_code.nil? - "#{original_filename}" if original_filename.present? + if Shop.current_shop.shop_code.nil? + "#{original_filename}" if original_filename.present? else - "#{Shop.first.shop_code}_#{original_filename}" if original_filename.present? - end + "#{Shop.current_shop.shop_code}_#{original_filename}" if original_filename.present? + end end # def cache_dir @@ -62,6 +62,6 @@ class CustomerImageUploader < CarrierWave::Uploader::Base # Avoid using model.id or version_name here, see uploader/store.rb for details. # def filename # "something.jpg" if original_filename - # end + # end -end \ No newline at end of file +end diff --git a/app/uploaders/employee_image_uploader.rb b/app/uploaders/employee_image_uploader.rb index 17c9d120..62aa3e15 100644 --- a/app/uploaders/employee_image_uploader.rb +++ b/app/uploaders/employee_image_uploader.rb @@ -20,11 +20,11 @@ class EmployeeImageUploader < CarrierWave::Uploader::Base end def filename - if Shop.first.shop_code.nil? - "#{original_filename}" if original_filename.present? + if Shop.current_shop.shop_code.nil? + "#{original_filename}" if original_filename.present? else - "#{Shop.first.shop_code}_#{original_filename}" if original_filename.present? - end + "#{Shop.current_shop.shop_code}_#{original_filename}" if original_filename.present? + end end # def cache_dir @@ -62,6 +62,6 @@ class EmployeeImageUploader < CarrierWave::Uploader::Base # Avoid using model.id or version_name here, see uploader/store.rb for details. # def filename # "something.jpg" if original_filename - # end + # end -end \ No newline at end of file +end diff --git a/app/uploaders/menu_item_image_uploader.rb b/app/uploaders/menu_item_image_uploader.rb index 7a4b2039..5f23cafc 100755 --- a/app/uploaders/menu_item_image_uploader.rb +++ b/app/uploaders/menu_item_image_uploader.rb @@ -15,16 +15,16 @@ class MenuItemImageUploader < CarrierWave::Uploader::Base # Override the directory where uploaded files will be stored. # This is a sensible default for uploaders that are meant to be mounted: def store_dir - "image/menu_images/#{Shop.first.shop_code}" + "image/menu_images/#{Shop.current_shop.shop_code}" # "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end def filename - if Shop.first.shop_code.nil? - "#{original_filename}" if original_filename.present? + if Shop.current_shop.shop_code.nil? + "#{original_filename}" if original_filename.present? else - "#{Shop.first.shop_code}_#{original_filename}" if original_filename.present? - end + "#{Shop.current_shop.shop_code}_#{original_filename}" if original_filename.present? + end end # def cache_dir @@ -42,7 +42,7 @@ class MenuItemImageUploader < CarrierWave::Uploader::Base # Process files as they are uploaded: # process scale: [200, 300] process :resize_to_fit => [400, 250]#[200, 150] - + # # def scale(width, height) # # do something diff --git a/app/uploaders/product_image_uploader.rb b/app/uploaders/product_image_uploader.rb index c39d867d..35fde675 100755 --- a/app/uploaders/product_image_uploader.rb +++ b/app/uploaders/product_image_uploader.rb @@ -20,11 +20,11 @@ class ProductImageUploader < CarrierWave::Uploader::Base end def filename - if Shop.first.shop_code.nil? - "#{original_filename}" if original_filename.present? + if Shop.current_shop.shop_code.nil? + "#{original_filename}" if original_filename.present? else - "#{Shop.first.shop_code}_#{original_filename}" if original_filename.present? - end + "#{Shop.current_shop.shop_code}_#{original_filename}" if original_filename.present? + end end # def cache_dir diff --git a/app/uploaders/shop_image_uploader.rb b/app/uploaders/shop_image_uploader.rb index 394704c3..c27fb65c 100644 --- a/app/uploaders/shop_image_uploader.rb +++ b/app/uploaders/shop_image_uploader.rb @@ -20,11 +20,11 @@ class ShopImageUploader < CarrierWave::Uploader::Base end def filename - if Shop.first.shop_code.nil? - "#{original_filename}" if original_filename.present? + if Shop.current_shop.shop_code.nil? + "#{original_filename}" if original_filename.present? else - "#{Shop.first.shop_code}_#{original_filename}" if original_filename.present? - end + "#{Shop.current_shop.shop_code}_#{original_filename}" if original_filename.present? + end end # def cache_dir @@ -62,6 +62,6 @@ class ShopImageUploader < CarrierWave::Uploader::Base # Avoid using model.id or version_name here, see uploader/store.rb for details. # def filename # "something.jpg" if original_filename - # end + # end -end \ No newline at end of file +end diff --git a/app/views/origami/dashboard/_menu.json.jbuilder b/app/views/origami/dashboard/_menu.json.jbuilder index 6d1ec624..372d521c 100644 --- a/app/views/origami/dashboard/_menu.json.jbuilder +++ b/app/views/origami/dashboard/_menu.json.jbuilder @@ -8,7 +8,7 @@ json.valid_time_to menu.valid_time_to.strftime("%H:%M") if (menu.menu_categories) order_by = Lookup.find_by_lookup_type("order_by") # if !order_by.nil? && order_by.value == "name" - # categories = MenuCategory.unscoped.where("menu_id ='#{menu.id}'").order("name asc") + # categories = MenuCategory.unscope(:order).where("menu_id ='#{menu.id}'").order("name asc") # else # categories = menu.menu_categories # end diff --git a/lib/tasks/receipt.rake b/lib/tasks/receipt.rake index 180b0de4..af50f3f3 100644 --- a/lib/tasks/receipt.rake +++ b/lib/tasks/receipt.rake @@ -3,7 +3,7 @@ namespace :consolidate do task :receipt => :environment do # Receipt.delete_all sales = Sale.all_receipts - shop = Shop.first #current_shop + shop = Shop.current_shop #Shop.current_shop sales.each do |sale| if sale.shift_sale_id.present? @@ -57,7 +57,7 @@ namespace :consolidate do ReceiptDetail.delete_all sales = Sale.all_receipt_details - shop = Shop.first #current_shop + shop = Shop.current_shop #Shop.current_shop sale_id = '' count = 0 From 108415ed3f80df5e4a01be29a930b4216f483687 Mon Sep 17 00:00:00 2001 From: Thein Lin Kyaw Date: Tue, 3 Dec 2019 10:02:49 +0630 Subject: [PATCH 03/17] update dine-in pay bill --- .../origami/payments_controller.rb | 4 +-- app/models/sale_payment.rb | 27 +++++-------------- 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/app/controllers/origami/payments_controller.rb b/app/controllers/origami/payments_controller.rb index 401e231b..b6c3e5be 100755 --- a/app/controllers/origami/payments_controller.rb +++ b/app/controllers/origami/payments_controller.rb @@ -176,14 +176,14 @@ class Origami::PaymentsController < BaseOrigamiController # For Cashier by Zone # bookings = Booking.where("sale_id='#{sale_id}'") - bookings = Booking.find_by_sale_id(sale_id) + bookings = saleObj.bookings[0] shift = ShiftSale.current_open_shift(current_user.id) if !shift.nil? cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id) else if bookings.dining_facility_id.to_i > 0 - table = DiningFacility.find(bookings.dining_facility_id) + table = bookings.dining_facility cashier_zone = CashierTerminalByZone.find_by_zone_id(table.zone_id) cashier_terminal = CashierTerminal.find(cashier_zone.cashier_terminal_id) diff --git a/app/models/sale_payment.rb b/app/models/sale_payment.rb index e0ad2383..c48b4a6b 100755 --- a/app/models/sale_payment.rb +++ b/app/models/sale_payment.rb @@ -87,7 +87,7 @@ class SalePayment < ApplicationRecord amount_due = amount_due - payment.payment_amount end end - if (amount_due >= 0) + if (amount_due > 0) payment_status = false membership_data = nil #route to payment type @@ -780,27 +780,14 @@ class SalePayment < ApplicationRecord def table_update_status(sale_obj) status = true sale_count = 0 - booking = Booking.find_by_sale_id(sale_obj.id) - if booking + if booking = sale_obj.bookings[0] if booking.dining_facility_id.to_i > 0 - table = DiningFacility.find(booking.dining_facility_id) - bookings = table.bookings - bookings.each do |tablebooking| - if tablebooking.booking_status != 'moved' - if tablebooking.sale_id - if tablebooking.sale.sale_status != 'completed' && tablebooking.sale.sale_status != 'void' && tablebooking.sale.sale_status != 'spoile' && tablebooking.sale.sale_status != 'waste' - status = false - sale_count += 1 - else - status = true - end - else - status = false - sale_count += 1 - end - end + table = booking.dining_facility + if Booking.left_joins(:sale).where(dining_facility_id: booking.dining_facility_id).where.not(booking_status: 'moved').where("sales.sale_status NOT IN ('completed', 'void', 'spoile', 'waste') OR sales.sale_status IS NULL").exists? + status = false end - if status && sale_count == 0 + + if status table.update_attributes(status: "available") # table.status = "available" # table.save From c8c39b06361511312a9f39354a4094c2801525f2 Mon Sep 17 00:00:00 2001 From: Thein Lin Kyaw Date: Tue, 3 Dec 2019 16:15:48 +0630 Subject: [PATCH 04/17] update origami/home/index --- app/controllers/origami/home_controller.rb | 8 ++-- app/models/dining_facility.rb | 38 +++--------------- app/models/lookup.rb | 17 ++++---- app/models/sale.rb | 2 +- app/models/sale_payment.rb | 45 +++++++++------------- app/views/origami/home/index.html.erb | 8 ++-- 6 files changed, 41 insertions(+), 77 deletions(-) diff --git a/app/controllers/origami/home_controller.rb b/app/controllers/origami/home_controller.rb index 30a6ce92..910fedf9 100755 --- a/app/controllers/origami/home_controller.rb +++ b/app/controllers/origami/home_controller.rb @@ -4,8 +4,8 @@ class Origami::HomeController < BaseOrigamiController def index @webview = check_mobile - @tables = Table.unscope(:order).all.active.order('status desc') - @rooms = Room.unscope(:order).all.active.order('status desc') + @tables = Table.unscope(:order).includes(:zone).all.active.order('status desc') + @rooms = Room.unscope(:order).includes(:zone).all.active.order('status desc') @complete = Sale.completed_sale("cashier") @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @@ -21,8 +21,8 @@ class Origami::HomeController < BaseOrigamiController @print_settings = PrintSetting.get_precision_delimiter() @webview = check_mobile - @tables = Table.unscope(:order).all.active.order('status desc') - @rooms = Room.unscope(:order).all.active.order('status desc') + @tables = Table.unscope(:order).includes(:zone).all.active.order('status desc') + @rooms = Room.unscope(:order).includes(:zone).all.active.order('status desc') @complete = Sale.completed_sale("cashier") @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @customers = Customer.pluck("customer_id, name") diff --git a/app/models/dining_facility.rb b/app/models/dining_facility.rb index e5f35e03..d759ba73 100755 --- a/app/models/dining_facility.rb +++ b/app/models/dining_facility.rb @@ -33,50 +33,22 @@ class DiningFacility < ApplicationRecord def get_current_booking checkin_time_lookup = Lookup.get_checkin_time_limit - booking = Booking.where("dining_facility_id = #{self.id} and booking_status ='assign' and (CASE WHEN checkin_at > '#{DateTime.now.utc}' THEN checkin_at >= '#{DateTime.now.utc}' ELSE checkin_at between '#{DateTime.now.utc - checkin_time_lookup.hours}' and '#{DateTime.now.utc}' END) and checkout_by is null").limit(1) #and checkout_at is null - # 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_by is null").limit(1) #and checkout_at is null - if booking.count > 0 then - return booking[0] - else - return nil - end + Booking.where(dining_facility_id: self.id, booking_status: 'assign', checkout_at: nil).where("checkin_at > ?", checkin_time_lookup.hours.ago).first #and checkout_at is null end def get_moved_booking checkin_time_lookup = Lookup.get_checkin_time_limit - booking = Booking.where("dining_facility_id = #{self.id} and booking_status ='moved' and checkin_at between '#{DateTime.now.utc - checkin_time_lookup.hours}' and '#{DateTime.now.utc}' and checkout_at is null").limit(1) - - if booking.count > 0 then - return booking[0] - else - return nil - end + Booking.where(dining_facility_id: self.id, booking_status: 'moved', checkout_at: nil).where("checkin_at > ?", checkin_time_lookup.hours.ago).first end def get_new_booking # query for new - # if status - # to ask when req bill booking_status? - booking = Booking.where("dining_facility_id = #{self.id} and booking_status ='assign' and sale_id is null and checkout_at is null").limit(1) - # else - # booking = Booking.where("dining_facility_id = #{self.id} and booking_status ='assign' and sale_id not null").limit(1) - # end - - if booking.count > 0 then - return booking[0].booking_id - else - return nil - end + Booking.where(dining_facility_id: self.id, booking_status: 'assign', sale_id: nil, checkout_at: nil).first end def get_current_checkout_booking checkin_time_lookup = Lookup.get_checkin_time_limit - booking = Booking.where("dining_facility_id = #{self.id} and booking_status ='assign' and checkin_at between '#{DateTime.now.utc - checkin_time_lookup.hours}' and '#{DateTime.now.utc}' and reserved_by is not null and checkout_by is null").limit(1) - if booking.count > 0 then - return booking[0] - else - return nil - end + Booking.where(dining_facility_id: self.id, booking_status: 'assign', checkout_at: nil).where.not(reserved_at: nil).where("checkin_at > ?", checkin_time_lookup.hours.ago).first end def get_checkout_booking @@ -119,7 +91,7 @@ class DiningFacility < ApplicationRecord def self.get_checkin_booking checkin_time_lookup = Lookup.get_checkin_time_limit - bookings = Booking.where("booking_status ='assign' and checkin_at between '#{DateTime.now.utc - checkin_time_lookup.hours}' and '#{DateTime.now.utc}' and reserved_by is not null and checkout_by is null") + bookings = Booking.where(booking_status: 'assign', checkout_at: nil).where.not(reserved_at: nil).where("checkin_at > ?", checkin_time_lookup.hours.ago) arr_booking = Array.new if bookings lookup_checkout_time = Lookup.collection_of("checkout_alert_time") diff --git a/app/models/lookup.rb b/app/models/lookup.rb index 5b45822c..ac7bd6da 100755 --- a/app/models/lookup.rb +++ b/app/models/lookup.rb @@ -4,6 +4,8 @@ class Lookup < ApplicationRecord scope :number_formats, -> { where(lookup_type: 'number_format')} + TIME_LIMIT = 5 + def available_types {'Employee Roles' => 'employee_roles', 'Dining Facilities Status' => 'dining_facilities_status', @@ -23,15 +25,13 @@ class Lookup < ApplicationRecord # Lookup.select("value, name").where("lookup_type = ?", lookup_type ).order("name asc").map { |r| [r.name, r.value] } # end + def self.time_limit + TIME_LIMIT + end + def self.get_checkin_time_limit - time_limit = 5 - - lookup = Lookup.find_by_lookup_type('checkin_time_limit') - if !lookup.nil? - time_limit = lookup.value.to_i - end - - return time_limit + return RequestStore[:checkin_time_limit] if RequestStore[:checkin_time_limit] + RequestStore[:checkin_time_limit] = Lookup.find_by_lookup_type('checkin_time_limit').value.to_i rescue time_limit end def self.sync_url @@ -58,7 +58,6 @@ class Lookup < ApplicationRecord def self.collection_of(type) Lookup.select("name, value").where("lookup_type" => type ).map { |l| [l.name, l.value] } - end def self.create_shift_sale_lookup diff --git a/app/models/sale.rb b/app/models/sale.rb index 59d3683b..c7a05189 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -2025,7 +2025,7 @@ end query = query.joins("join sale_orders as sale_orders on sale_orders.sale_id = sales.sale_id") .joins("join orders as orders on orders.order_id = sale_orders.order_id") query = query.where("sales.sale_status != 'new' AND orders.status = 'billed' #{type}") - query = query.where("DATE_FORMAT(sales.receipt_date,'%Y-%m-%d') = ? ",DateTime.now.strftime('%Y-%m-%d')) + query = query.receipt_date_between(Time.now.beginning_of_day, Time.now.end_of_day) .group("sales.sale_id") end diff --git a/app/models/sale_payment.rb b/app/models/sale_payment.rb index c48b4a6b..631ede89 100755 --- a/app/models/sale_payment.rb +++ b/app/models/sale_payment.rb @@ -960,37 +960,30 @@ class SalePayment < ApplicationRecord #credit payment query def self.get_credit_sales(params) - receipt_no = "" - customer = "" - if !params["receipt_no"].blank? - receipt_no = " and s.receipt_no LIKE '%#{params["receipt_no"]}%'" + payments = SalePayment.select("sale_payments.sale_id, sale_payments.sale_payment_id, sale_payments.payment_method, sale_payments.payment_amount") + .select("SUM(sale_payments.payment_amount) OVER (PARTITION BY sale_payments.sale_id) total_payment_amount") + + credit_sales = Sale.select("sales.sale_id, sales.receipt_no, sales.receipt_date as sale_date, sales.cashier_name") + .select("sale_payments.sale_payment_id, sale_payments.payment_amount").select("customers.name as customer_name") + .joins("JOIN (#{payments.to_sql}) AS sale_payments ON sale_payments.sale_id = sales.sale_id").joins(:customer).joins(:orders) + .completed.paid.where("sale_payments.payment_method = 'creditnote' AND sales.grand_total > sale_payments.total_payment_amount - sale_payments.payment_amount") + .group(:receipt_no) + .order(:receipt_date).order(:receipt_no) + + if params["receipt_no"].present? + credit_sales = credit_sales.where("sales.receipt_no LIKE ?", "%#{params["receipt_no"]}%") end - if !params["customer_id"].blank? - customer = " and s.customer_id = '#{params["customer_id"]}'" + if params["customer_id"].present? + credit_sales = credit_sales.where("sales.customer_id = ?", params["customer_id"]) end - order_source_query = "(select orders.source FROM orders JOIN sale_orders so ON so.order_id=orders.order_id WHERE so.sale_id=s.sale_id GROUP BY so.sale_id)" - - query = SalePayment.select("s.receipt_no, sale_payments.sale_payment_id, - sale_payments.payment_method, - SUM(sale_payments.payment_amount) as payment_amount, - s.receipt_date as sale_date, - s.sale_id, - s.cashier_name as cashier_name, c.name as customer_name") - .joins("INNER JOIN sales s ON s.sale_id = sale_payments.sale_id") - .joins("INNER JOIN customers c ON c.customer_id = s.customer_id") - - if params[:type].nil? - query = query.where("(CASE WHEN (s.grand_total + s.amount_changed)=(select SUM(payment_amount) FROM sale_payments WHERE sale_id=s.sale_id AND payment_method!='creditnote') THEN NULL ELSE payment_method='creditnote' END) and s.sale_status = 'completed' and s.payment_status='paid' #{receipt_no} #{customer}") - elsif params[:type] == "cashier" - query = query.where("(CASE WHEN (s.grand_total + s.amount_changed)=(select SUM(payment_amount) FROM sale_payments WHERE sale_id=s.sale_id AND payment_method!='creditnote') THEN NULL ELSE payment_method='creditnote' AND #{order_source_query}='#{params[:type]}' OR #{order_source_query}='emenu' END) and s.sale_status = 'completed' and s.payment_status='paid' #{receipt_no} #{customer}") - else - query = query.where("(CASE WHEN (s.grand_total + s.amount_changed)=(select SUM(payment_amount) FROM sale_payments WHERE sale_id=s.sale_id AND payment_method!='creditnote') THEN NULL ELSE payment_method='creditnote' AND #{order_source_query}='#{params[:type]}' END) and s.sale_status = 'completed' and s.payment_status='paid' #{receipt_no} #{customer}") + if params[:type].present? + sources = [] + sources << params[:type] + sources << 'emenu' if params[:type] == 'cashier' + credit_sales = credit_sales.where("orders.source IN (?)", sources) end - query = query.group("s.receipt_no") - .order("s.receipt_date ASC, s.receipt_no ASC") - return query end def self.get_credit_amount_due_left(sale_id) diff --git a/app/views/origami/home/index.html.erb b/app/views/origami/home/index.html.erb index ba4da374..39c33749 100755 --- a/app/views/origami/home/index.html.erb +++ b/app/views/origami/home/index.html.erb @@ -65,7 +65,7 @@ <% end %>
Table <%= table.name %> ( <%= table.seater %> Seat )
- <%= table.zone.name %> + <%= table.zone.name %>
<% end %> @@ -160,7 +160,7 @@ <%= t :credit %> <%= t :sale %> <%= t("views.right_panel.detail.date") %> <%= t("views.right_panel.detail.receipt_no") %> <%= t :cashier %> <%= t("views.right_panel.detail.name") %> - <%= t :customer %> <%= t("views.right_panel.detail.name") %> + <%= t :customer %> <%= t("views.right_panel.detail.name") %> <%= t("views.right_panel.detail.credit_amount") %> @@ -338,8 +338,8 @@ function warnBeforeRedirect(linkURL,occupied_count) { text = "Are you sure you want to close cashier?"; } swal({ - title: "Alert!", - text: text, + title: "Alert!", + text: text, type: "warning", showCancelButton: true, html: true From 37380f6bfb24c0ad4b8421e27fdbb440a826fe92 Mon Sep 17 00:00:00 2001 From: Thein Lin Kyaw Date: Tue, 3 Dec 2019 19:37:59 +0630 Subject: [PATCH 05/17] Fix json rendering error --- app/controllers/api/api_controller.rb | 10 +++++++++- app/controllers/application_controller.rb | 4 ++-- app/controllers/base_controller.rb | 5 +++-- app/controllers/base_crm_controller.rb | 4 +++- app/controllers/base_inventory_controller.rb | 4 +++- app/controllers/base_oqs_controller.rb | 4 +++- app/controllers/base_origami_controller.rb | 4 +++- app/controllers/base_report_controller.rb | 4 +++- app/controllers/base_waiter_controller.rb | 4 +++- app/controllers/concerns/multi_tenancy.rb | 1 - 10 files changed, 32 insertions(+), 12 deletions(-) diff --git a/app/controllers/api/api_controller.rb b/app/controllers/api/api_controller.rb index 8a84cfa1..0cf85065 100755 --- a/app/controllers/api/api_controller.rb +++ b/app/controllers/api/api_controller.rb @@ -1,11 +1,19 @@ class Api::ApiController < ActionController::API - include TokenVerification, MultiTenancy + include MultiTenancy + include TokenVerification include ActionController::MimeResponds + include ActionView::Rendering # before_action :lookup_domain helper_method :current_token, :current_login_employee, :get_cashier private + # ActionView::Rendering override render_to_body breaks render :json, + # resulting in an ActionView::MissingTemplate error. + def render_to_body(options) + _render_to_body_with_renderer(options) || super + end + #this is base api base controller to need to inherit. #all token authentication must be done here #response format must be set to JSON diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 81b4835d..8f537383 100755 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,5 +1,6 @@ class ApplicationController < ActionController::Base - include LoginVerification, MultiTenancy + include MultiTenancy + include LoginVerification #before_action :check_installation protect_from_forgery with: :exception @@ -17,5 +18,4 @@ class ApplicationController < ActionController::Base flash[:warning] = exception.message redirect_to root_path end - end diff --git a/app/controllers/base_controller.rb b/app/controllers/base_controller.rb index 1bb0421e..22cbf130 100755 --- a/app/controllers/base_controller.rb +++ b/app/controllers/base_controller.rb @@ -1,6 +1,7 @@ class BaseController < ActionController::Base include MultiTenancy - layout "installation" - protect_from_forgery with: :exception + layout "installation" + + protect_from_forgery with: :exception end diff --git a/app/controllers/base_crm_controller.rb b/app/controllers/base_crm_controller.rb index 08bc8138..577c387e 100755 --- a/app/controllers/base_crm_controller.rb +++ b/app/controllers/base_crm_controller.rb @@ -1,5 +1,7 @@ class BaseCrmController < ActionController::Base - include LoginVerification, + include MultiTenancy + include LoginVerification + layout "CRM" before_action :check_user diff --git a/app/controllers/base_inventory_controller.rb b/app/controllers/base_inventory_controller.rb index bd455c33..45fa8954 100755 --- a/app/controllers/base_inventory_controller.rb +++ b/app/controllers/base_inventory_controller.rb @@ -1,5 +1,7 @@ class BaseInventoryController < ActionController::Base - include LoginVerification, MultiTenancy + include MultiTenancy + include LoginVerification + layout "inventory" before_action :check_user diff --git a/app/controllers/base_oqs_controller.rb b/app/controllers/base_oqs_controller.rb index 6e6a9c0f..6b01383d 100755 --- a/app/controllers/base_oqs_controller.rb +++ b/app/controllers/base_oqs_controller.rb @@ -1,5 +1,7 @@ class BaseOqsController < ActionController::Base - include LoginVerification, MultiTenancy + include MultiTenancy + include LoginVerification + layout "OQS" before_action :check_user diff --git a/app/controllers/base_origami_controller.rb b/app/controllers/base_origami_controller.rb index e9cddf05..e3daff76 100755 --- a/app/controllers/base_origami_controller.rb +++ b/app/controllers/base_origami_controller.rb @@ -1,5 +1,7 @@ class BaseOrigamiController < ActionController::Base - include LoginVerification, MultiTenancy + include MultiTenancy + include LoginVerification + layout "origami" before_action :check_user diff --git a/app/controllers/base_report_controller.rb b/app/controllers/base_report_controller.rb index b3d1d23a..a4c7c3c3 100755 --- a/app/controllers/base_report_controller.rb +++ b/app/controllers/base_report_controller.rb @@ -1,5 +1,7 @@ class BaseReportController < ActionController::Base - include LoginVerification, MultiTenancy + include MultiTenancy + include LoginVerification + layout "application" before_action :check_user diff --git a/app/controllers/base_waiter_controller.rb b/app/controllers/base_waiter_controller.rb index b1d2056c..0962b3f0 100755 --- a/app/controllers/base_waiter_controller.rb +++ b/app/controllers/base_waiter_controller.rb @@ -1,5 +1,7 @@ class BaseWaiterController < ActionController::Base - include LoginVerification, MultiTenancy + include MultiTenancy + include LoginVerification + layout "waiter" before_action :check_user diff --git a/app/controllers/concerns/multi_tenancy.rb b/app/controllers/concerns/multi_tenancy.rb index 5009e094..cb7c8aae 100644 --- a/app/controllers/concerns/multi_tenancy.rb +++ b/app/controllers/concerns/multi_tenancy.rb @@ -4,7 +4,6 @@ module MultiTenancy included do set_current_tenant_through_filter if respond_to? :set_current_tenant_through_filter before_action :find_shop_by_subdomain_or_frist if respond_to? :before_action - helper_method :current_shop if respond_to? :helper_method end private From dc1f464b7f82ee8f3dd1e1dc76abcf33687d5fbb Mon Sep 17 00:00:00 2001 From: Thein Lin Kyaw Date: Wed, 4 Dec 2019 15:49:03 +0630 Subject: [PATCH 06/17] update api/resturant/menu --- .../api/check_in_process_controller.rb | 30 +++--- .../api/restaurant/menu_controller.rb | 20 ++-- .../origami/dashboard_controller.rb | 2 +- .../restaurant/menu/_menu_item.json.jbuilder | 92 ++++++------------- 4 files changed, 54 insertions(+), 90 deletions(-) diff --git a/app/controllers/api/check_in_process_controller.rb b/app/controllers/api/check_in_process_controller.rb index 602ef600..3e703cc2 100644 --- a/app/controllers/api/check_in_process_controller.rb +++ b/app/controllers/api/check_in_process_controller.rb @@ -1,8 +1,8 @@ class Api::CheckInProcessController < Api::ApiController # before_action :authenticate def check_in_time - if params[:dining_id] - dining_facility = DiningFacility.find(params[:dining_id]) + if params[:dining_id] + dining_facility = DiningFacility.find(params[:dining_id]) if params[:booking_id] data = Booking.where("dining_facility_id = #{params[:dining_id]} AND booking_id = '#{params[:booking_id]}'") if data.count > 0 @@ -10,7 +10,7 @@ class Api::CheckInProcessController < Api::ApiController else booking = nil end - else + else booking = dining_facility.get_current_booking end if !booking.nil? @@ -21,7 +21,7 @@ class Api::CheckInProcessController < Api::ApiController #Send to background job for processing if ENV["SERVER_MODE"] == 'cloud' from = request.subdomain + "." + request.domain - else + else from = "" end ActionCable.server.broadcast "check_in_booking_channel",table: table,from:from @@ -37,7 +37,7 @@ class Api::CheckInProcessController < Api::ApiController end lookup_checkout_time = Lookup.collection_of("checkout_alert_time") - + if !lookup_checkout_time.empty? now = Time.now.utc lookup_checkout_time.each do |checkout_time| @@ -52,16 +52,18 @@ class Api::CheckInProcessController < Api::ApiController else render :json => { :status => true } end - - else + + else render :json => { :status => false, :error_message => "No current booking!" } end + else + render :json => { :status => false } end end def check_in_process if params[:dining_id] - dining_facility = DiningFacility.find(params[:dining_id]) + dining_facility = DiningFacility.find(params[:dining_id]) if dining_facility.is_active && dining_facility.status == "available" if params[:checkin_time] checkin_at = nil @@ -75,7 +77,7 @@ class Api::CheckInProcessController < Api::ApiController if dining_facility.check_time(checkin_at, "checkin") booking = dining_facility.get_current_booking if booking.nil? - + booking = Booking.create({:dining_facility_id => params[:dining_id],:type => "TableBooking", :checkin_by=>current_login_employee.name,:checkin_at => checkin_at,:checkout_at =>nil, :booking_status => "assign", :reserved_at => nil, :reserved_by => nil }) if booking.save! @@ -98,7 +100,7 @@ class Api::CheckInProcessController < Api::ApiController booking = dining_facility.get_current_checkout_booking if booking.nil? lookup_checkout_time = Lookup.collection_of("checkout_time") - + if !lookup_checkout_time.empty? today = Time.now.utc.getlocal checkout_at = Time.now.utc.getlocal @@ -118,7 +120,7 @@ class Api::CheckInProcessController < Api::ApiController # else # type = "RoomBooking" # end - + booking = Booking.create({:dining_facility_id => params[:dining_id],:type => "TableBooking", :checkin_by=>current_login_employee.name,:checkin_at => Time.now.utc,:checkout_at =>checkout_at, :booking_status => "assign", :reserved_at => checkout_at, :reserved_by => current_login_employee.name }) if booking.save! @@ -133,13 +135,13 @@ class Api::CheckInProcessController < Api::ApiController unique_code = "CheckInOutPdf" printer = PrintSetting.find_by_unique_code(unique_code) - # print when complete click + # print when complete click order_queue_printer = Printer::OrderQueuePrinter.new(printer) if !printer.nil? order_queue_printer.print_check_in_out(printer, cashier_terminal, booking, dining_facility) end - end + end render :json => { :status => true, :booking_id => booking.booking_id, :checkout_at => booking.checkout_at.utc.getlocal.strftime("%Y-%m-%d %H:%M") } else render :json => { :status => true } @@ -176,7 +178,7 @@ class Api::CheckInProcessController < Api::ApiController booking.save! render :json => { :status => true, :checkout_at => booking.checkout_at.utc.getlocal.strftime("%Y-%m-%d %H:%M") } - elsif !params[:booking_id].nil? && params[:time].nil? + elsif !params[:booking_id].nil? && params[:time].nil? error_message = "time is required!" render :json => { :status => false, :error_message => error_message } elsif params[:booking_id].nil? && !params[:time].nil? diff --git a/app/controllers/api/restaurant/menu_controller.rb b/app/controllers/api/restaurant/menu_controller.rb index 7dfa0ec5..ae9f7b12 100755 --- a/app/controllers/api/restaurant/menu_controller.rb +++ b/app/controllers/api/restaurant/menu_controller.rb @@ -6,7 +6,8 @@ class Api::Restaurant::MenuController < Api::ApiController param_checksum = params[:checksum] # checksum = File.readlines("public/checksums/menu_json.txt").pop.chomp - all_menu = Menu.active.all + all_menu = Menu.includes(:menu_categories => [:children, :menu_items => [:menu_item_instances => :menu_instance_item_sets, :item_sets => :menu_item_instances]]).active.all + @request_url = '' if ENV["SERVER_MODE"] == "cloud" @request_url = request.base_url @@ -14,20 +15,21 @@ class Api::Restaurant::MenuController < Api::ApiController # to hash menu_array = [] all_menu.each do |m| - menu_array.push(m.to_json(:include => {:menu_categories => - { :include => { :menu_items => - { :include => [:menu_item_sets, :menu_item_instances => - { :include => :menu_instance_item_sets}]} } }})) - end - + menu_array.push(m.to_json(:include => { :menu_categories => { :include => { :menu_items => { :include => [ :item_sets, :menu_item_instances => { :include => :menu_instance_item_sets } ] } } } } )) + end + #export Checksum file generate by md5 menu_checksum = Digest::MD5.hexdigest(menu_array.to_json) if menu_checksum != param_checksum response.headers['CHECKSUM'] = menu_checksum - @menus = all_menu + @menus = all_menu + @item_attributes = MenuItemAttribute.all.load + @item_options = MenuItemOption.all.load + else + render :json => nil end - # @current_menu = Menu.current_menu + # @current_menu = Menu.current_menu end #Description diff --git a/app/controllers/origami/dashboard_controller.rb b/app/controllers/origami/dashboard_controller.rb index 4ff6e8b3..52eb5cf4 100644 --- a/app/controllers/origami/dashboard_controller.rb +++ b/app/controllers/origami/dashboard_controller.rb @@ -99,7 +99,7 @@ class Origami::DashboardController < BaseOrigamiController end def get_all_menu - @menus = Menu.includes(:menu_categories => :children).includes(:menu_categories => {:menu_items => :menu_item_instances}).includes(:menu_categories => {:menu_items => :item_sets }).includes(:menu_categories => {:menu_items => {:item_sets => :menu_item_instances}}).active.all + @menus = Menu.includes(:menu_categories => [:children, :menu_items => [:menu_item_instances => :menu_instance_item_sets, :item_sets => :menu_item_instances]]).active.all @item_attributes = MenuItemAttribute.all.load @item_options = MenuItemOption.all.load end diff --git a/app/views/api/restaurant/menu/_menu_item.json.jbuilder b/app/views/api/restaurant/menu/_menu_item.json.jbuilder index c6cc8468..4f283e2c 100755 --- a/app/views/api/restaurant/menu/_menu_item.json.jbuilder +++ b/app/views/api/restaurant/menu/_menu_item.json.jbuilder @@ -1,52 +1,21 @@ # Format for attributes json attr_format = [] -# Format for attributes json +# Format for attributes json if item.is_available - if item.item_attributes.count > 0 - item.item_attributes.each do|attr_id| - menu_attr = MenuItemAttribute.find(attr_id) - if attr_format.count == 0 - attr_format.push({ type: menu_attr.attribute_type, values: [menu_attr.name] }) - next - end - - attr_format.each do |af| - if menu_attr.attribute_type.in? attr_format.map {|k| k[:type]} - if menu_attr.attribute_type == af[:type] - af[:values].push(menu_attr.name) - end - else - new_attr = {type: menu_attr.attribute_type, values: [ menu_attr.name ] } - attr_format.push(new_attr) - break - end - end - end + # Format for attributes json + attr_format = [] + # Format for attributes json + if item.item_attributes.count > 0 + item_attributes = @item_attributes.select{ |x| item.item_attributes.include?(x.id.to_s) } + attr_format = item_attributes.group_by {|att| att.attribute_type }.map { |type, values| {type: type, values: values.map(&:name)} } end # Format for option json opt_format = [] - # Format for attributes json - if item.item_options.count > 0 - item.item_options.each do|opt| - menu_opt = MenuItemOption.find(opt) - if opt_format.count == 0 - opt_format.push({ type: menu_opt.option_type, values: [menu_opt.name] }) - next - end - - opt_format.each do |of| - if menu_opt.option_type.in? opt_format.map {|k| k[:type]} - if menu_opt.option_type == of[:type] - of[:values].push(menu_opt.name) - end - else - new_opt = {type: menu_opt.option_type, values: [ menu_opt.name ] } - opt_format.push(new_opt) - break - end - end - end + # Format for attributes json + if item.item_options.count > 0 + item_options = @item_options.select{ |x| item.item_options.include?(x.id.to_s) } + opt_format = item_options.group_by {|opt| opt.option_type }.map { |type, values| {type: type, values: values.map(&:name)} } end #Menu Item Information @@ -68,17 +37,15 @@ if item.is_available json.is_sub_item item.is_sub_item json.unit item.unit - # Item Sets of Menu Item + # Item Sets of Menu Item json.item_sets item.item_sets do |its| json.id its.id json.name its.name json.alt_name its.alt_name json.min_selectable_qty its.min_selectable_qty json.max_selectable_qty its.max_selectable_qty - json.instances its.menu_item_instances do |i| - json.id i.id - end - end + json.instances its.menu_item_instances.map { |i| {id: i.id} } + end json.attributes attr_format json.options opt_format @@ -97,25 +64,18 @@ if item.is_available json.instances item.menu_item_instances do |is| if is.is_available # Convert id to name for attributes - instance_attr = [] + instance_attr = @item_attributes.select{ |x| item.item_attributes.include?(x.id) }.pluck(:name) - is.item_attributes.each do |ia| - # mItemAttr = MenuItemAttribute.find(is) - # instance_attr.push(ia) - mItemAttr = MenuItemAttribute.find(ia).name - instance_attr.push(mItemAttr) - end - - json.id is.id - json.code is.item_instance_code - json.name is.item_instance_name - json.price is.price - json.is_available is.is_available - json.is_default is.is_default - json.is_on_promotion is.is_on_promotion - json.promotion_price is.promotion_price - json.values instance_attr - # json.item_sets is.item_sets + json.id is.id + json.code is.item_instance_code + json.name is.item_instance_name + json.price is.price + json.is_available is.is_available + json.is_default is.is_default + json.is_on_promotion is.is_on_promotion + json.promotion_price is.promotion_price + json.values instance_attr + # json.item_sets is.item_sets end end @@ -125,4 +85,4 @@ if item.is_available # json.partial! 'api/restaurant/menu/menu_item', item: item # end # end -end \ No newline at end of file +end From d4e6b8a45369d48cd4ed8f8dd31f3df7d135ccdd Mon Sep 17 00:00:00 2001 From: Nweni Date: Wed, 4 Dec 2019 17:32:56 +0630 Subject: [PATCH 07/17] ssl --- nweni.crt | 24 ++++++++++++++++++++++++ nweni.key | 28 ++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100755 nweni.crt create mode 100755 nweni.key diff --git a/nweni.crt b/nweni.crt new file mode 100755 index 00000000..a6e4d152 --- /dev/null +++ b/nweni.crt @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIIEBzCCAu+gAwIBAgIJAOMNKpr3UCfFMA0GCSqGSIb3DQEBCwUAMIGiMQswCQYD +VQQGEwJNTTEPMA0GA1UECAwGWWFuZ29uMQ8wDQYDVQQHDAZZYW5nb24xGTAXBgNV +BAoMEENvZGUyTEFCIFB0ZSBMdGQxFDASBgNVBAsMC0RldmVsb3BtZW50MR0wGwYD +VQQDDBRDb2RlMkxBQiBDZXJ0aWZpY2F0ZTEhMB8GCSqGSIb3DQEJARYSaGVsbG9A +Y29kZTJsYWIuY29tMB4XDTE5MTIwNDA1NTgwMFoXDTIxMDQxNzA1NTgwMFowgZQx +CzAJBgNVBAYTAk1NMQ8wDQYDVQQIDAZZYW5nb24xDzANBgNVBAcMBllhbmdvbjEZ +MBcGA1UECgwQQ29kZTJMQUIgUHRlIEx0ZDEUMBIGA1UECwwLRGV2ZWxvcG1lbnQx +ITAfBgkqhkiG9w0BCQEWEmhlbGxvQGNvZGUybGFiLmNvbTEPMA0GA1UEAwwGTndl +IE5pMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlzBofZOWVWCDRJ3Y +8NSR+FJg1/KMcVXhJbF5xuEz5K4+b8/VJG6CPE6O9qnqMhFd+Fp/f8GReCiP3Xb9 +dp8E5k6p/sTU18rDgurWm/DAhOXjq85EiNHitsLrGmLxYxHq2nxXFYuhYcM6lP0L +SXfgUuwMNs3HpNFo7Fk21M7XKzdZdJPB35s3wZVWmHPon8i/oX8PHB8/IrhPGU7P +Q33WZburEXK78jFbTGfavGSd5of17wIeI4saOpcAt7yz3rxa3tMb+FEZdJ1gxMrJ +EX8A/qUJ7MYyc4JV+ssKcom8iQcLzdBlNkEWDZpAglmCe6jF7v7QrzPZDDFDLc3A +L4W/NwIDAQABo0wwSjAfBgNVHSMEGDAWgBQkFPQitKTJkB0Xw/L/CbmtGTFv5TAJ +BgNVHRMEAjAAMAsGA1UdDwQEAwIE8DAPBgNVHREECDAGhwTAqAHyMA0GCSqGSIb3 +DQEBCwUAA4IBAQCIFcpDdcIFxBnrOYjuadtL4X+iUT2UK1UMox/X2kz+agdpOVET +VRTMcGOFta/iecEAmI2BPl+TP+qNO2xAfXKbU6vrD0lsshB6PlUxGSxnlFTDW5Df +SZuiMb3J6AT9vdp/U1CwLGthrvmWyjXvYYKbEb9LIqKOVm0WVj8drhnGxAq0Ie6k +OrT76+8gjzYkR8HJ8v3bXijkeSMMTQxD+9K/wikoyaXtKV7QPjwjnKnYfOHpgvql ++lIF5S16FIGTxedX8qsvrF/P7/Z657riqZGaW9Nfm7j0kDS9tEWKBk+fW0zw/sYw +BRC3M+delv19ae//Ia0sIL2vNEB43HaXxNbK +-----END CERTIFICATE----- diff --git a/nweni.key b/nweni.key new file mode 100755 index 00000000..610d33cf --- /dev/null +++ b/nweni.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCXMGh9k5ZVYINE +ndjw1JH4UmDX8oxxVeElsXnG4TPkrj5vz9UkboI8To72qeoyEV34Wn9/wZF4KI/d +dv12nwTmTqn+xNTXysOC6tab8MCE5eOrzkSI0eK2wusaYvFjEerafFcVi6FhwzqU +/QtJd+BS7Aw2zcek0WjsWTbUztcrN1l0k8HfmzfBlVaYc+ifyL+hfw8cHz8iuE8Z +Ts9DfdZlu6sRcrvyMVtMZ9q8ZJ3mh/XvAh4jixo6lwC3vLPevFre0xv4URl0nWDE +yskRfwD+pQnsxjJzglX6ywpyibyJBwvN0GU2QRYNmkCCWYJ7qMXu/tCvM9kMMUMt +zcAvhb83AgMBAAECggEAN3cn7mH1tg65ObQbAYdKoeo+4xp1kaKq/bQVc/PsoMmX +2FdL35i3KL69ThrZ81JRwioZOlpeLtHaranYpOsD1iYn0XKOjzgw79eNshnp1xer +pbz/gZ5WaSwrKjwASJMrMMqK/DmElCQWWtBWkrZq0qEMfhKSWpIExyiXqAzV/WE5 +jc+CllMGWY4vmTscWyKKBvqjaLJ7A1z+cRZzrPwmQKcZ2DQ/DVzjcTmh+W0CGPE9 +gVL+mZ5rWbCbL43RWHKt/ewwrNs+io8zPWaOBAobUfGYa/IhCSLktmDSyjK/tUY3 +CqW2Lqc+07I/cb4kQkBfIAUg4mZCTBwh80puTPGY4QKBgQDINGD2Yn6CpY1viQiR +rEWKfyYBEchI+um68Vz3l7d7nEOeO+OmPivBL1UCewf/ux3YqKu4HTrYd5VUVbxN +141k5Hv9XCf6Fn/wcSptJLK9bSkWh08+LcLS2/K7rnF57T2v1YIsn1zr0E6rKIEE +XRuodMjQvkex/KVrbXjK83JpJwKBgQDBUwMUK8IOrnYiq/EkRB2roCyLNbrUEEaU +QvrlOztOI8ctf236i51q2708aqSGrnjbQ6uXOHwX5O4i6Psjw+llPSF1wpE9tyGw +dhsBFYYMxnetXIPLnfxE2bnKNsN5dDtI/JwcKA5TB+3BXkIYbkCbs0z0/WDtjJZE +IOw40lMjcQKBgGvhpbo+2vMlqLBIhGCTFyoJV/5NicKhyp8c/r7Ad3PZgapblVF4 +wPUpv0JF78qDFxMv2NCul44b6lD2njDIDX4njRS6uyQNScXUBUuo8dQXZYOpSC82 +U3xyXzt5Rdaw24PLpojLGzRLHIkom1UxovzEaY3qaxHjFXRtGiEqzCUTAoGAT4ip +UZkXAxc/PtBiKrtjQYJqEPOP40K25rQPqFMP+Pu7K7qrMlJR9u5kEgEFousQiZRz +eYkhdGsYlYAoIfSthpr5swrS2gMHdyN/xJhoR8U24zmWdySN7n1sdAbHsKXi5goW +53aLPhma9NykcIybQ/MmC/xZ7iDSiUDKLi5JSeECgYBf5aSPelr/ShEKlxz4BgcD +XcMNzTZXNJTNgMHvLorlUG0Ev6C95SlwzJd0aiTLpm2WtO9Uy/AtueVQc02En3+1 +E2eX+cTuYD+eAFjxdvAaOKwkPbtk8xAlcQ34iRdcXvLM+f6UpXk+8ytVvPc5dmF7 +kM3zuXJ66D8u1IV6G0asyA== +-----END PRIVATE KEY----- From 3a99e1bb09e9a21e0861eabd387829a1a3995952 Mon Sep 17 00:00:00 2001 From: Thein Lin Kyaw Date: Mon, 9 Dec 2019 10:33:10 +0630 Subject: [PATCH 08/17] update for order process Add activereocrd-import gem for bulk insert --- Gemfile | 3 + Gemfile.lock | 3 + README.md | 4 + .../api/check_in_process_controller.rb | 2 +- app/controllers/oqs/backhome_controller.rb | 12 +- .../origami/addorders_controller.rb | 120 ++++----- app/controllers/origami/home_controller.rb | 109 +++----- .../origami/payments_controller.rb | 150 +++++------ app/models/assigned_order_item.rb | 17 +- app/models/booking.rb | 3 + app/models/dining_facility.rb | 27 +- app/models/lookup.rb | 2 +- app/models/menu_item.rb | 38 ++- app/models/order.rb | 152 ++++------- app/models/order_item.rb | 10 +- app/models/order_queue_station.rb | 243 +++++------------- app/models/printer/order_queue_printer.rb | 219 ++++------------ app/models/printer/receipt_printer.rb | 161 ++---------- app/models/product.rb | 44 ++-- app/models/sale.rb | 8 - app/models/seed_generator.rb | 65 ++--- app/views/origami/addorders/detail.html.erb | 8 +- 22 files changed, 441 insertions(+), 959 deletions(-) diff --git a/Gemfile b/Gemfile index ba568b94..957e9968 100644 --- a/Gemfile +++ b/Gemfile @@ -44,6 +44,9 @@ gem 'rack-cors' # Multi-tenancy for shops gem 'acts_as_tenant' +# Activerecord-Import is a library for bulk inserting data using ActiveRecord. +gem 'activerecord-import' + # image upload gem 'carrierwave', '~> 1.0' gem 'mini_magick' diff --git a/Gemfile.lock b/Gemfile.lock index bbcc1085..76ce8948 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -41,6 +41,8 @@ GEM activemodel (= 5.1.7) activesupport (= 5.1.7) arel (~> 8.0) + activerecord-import (1.0.3) + activerecord (>= 3.2) activesupport (5.1.7) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) @@ -320,6 +322,7 @@ PLATFORMS ruby DEPENDENCIES + activerecord-import acts_as_tenant aescrypt axlsx (= 2.0.1) diff --git a/README.md b/README.md index 54474f5e..67fcc40b 100755 --- a/README.md +++ b/README.md @@ -288,6 +288,10 @@ For Number Formats => settings/lookups => { lookup_type: number_format, name: strip_insignificant_zeros, value: {true: => ['1', 't', 'true', 'on', 'y', 'yes'], false: => ['0', 'f', 'false', 'off', 'n', 'no', ...] } +For Booking checkin time limit + settings/lookups => + { lookup_type: checkin_time_limit, name: CheckinTimeLimit, value: total hours before checkout (e.g., '48')) } + /* Customer Types in lookups */ 1) settings/lookups => { type:customer_type, name: Dinein, value:Dinein } 2) settings/lookups => { type:customer_type, name: Takeaway, value: Takeaway } diff --git a/app/controllers/api/check_in_process_controller.rb b/app/controllers/api/check_in_process_controller.rb index 3e703cc2..2a04ff6b 100644 --- a/app/controllers/api/check_in_process_controller.rb +++ b/app/controllers/api/check_in_process_controller.rb @@ -97,7 +97,7 @@ class Api::CheckInProcessController < Api::ApiController render :json => { :status => false, :error_message => "Operation failed!" } end else - booking = dining_facility.get_current_checkout_booking + booking = dining_facility.current_checkout_booking if booking.nil? lookup_checkout_time = Lookup.collection_of("checkout_time") diff --git a/app/controllers/oqs/backhome_controller.rb b/app/controllers/oqs/backhome_controller.rb index 4ac5f0a2..a66751cf 100755 --- a/app/controllers/oqs/backhome_controller.rb +++ b/app/controllers/oqs/backhome_controller.rb @@ -21,7 +21,7 @@ class Oqs::HomeController < BaseOqsController zone_id = qid.zone_id i=i+1 end - end + end end @queue_stations_items.push({:zone_id => zone_id , :station_name => que.station_name, :is_active => que.is_active , :is_ap => que.auto_print, :item_count => i }) end @@ -57,14 +57,6 @@ class Oqs::HomeController < BaseOqsController end end - # booking_id = dining.get_new_booking - # BookingOrder.where("booking_id='#{ booking_id }'").find_each do |bo| - # order=Order.find(bo.order_id); - # order.order_items.each do |oi| - # items.push(oi) - # end - # end - render :json => items.to_json end @@ -88,7 +80,7 @@ class Oqs::HomeController < BaseOqsController end # Query for OQS with delivery status - def queue_items_query(status) + def queue_items_query(status) AssignedOrderItem.select("assigned_order_items.assigned_order_item_id, oqs.id as station_id, oqs.station_name, oqs.is_active, oqpz.zone_id, df.name as zone, df.type as type, odt.order_id, odt.item_code, odt.item_name, odt.price, odt.qty, odt.item_order_by, odt.options, cus.name as customer_name, odt.created_at") .joins(" left join order_queue_stations as oqs on oqs.id = assigned_order_items.order_queue_station_id left join order_queue_process_by_zones as oqpz on oqpz.order_queue_station_id = oqs.id diff --git a/app/controllers/origami/addorders_controller.rb b/app/controllers/origami/addorders_controller.rb index 597b5d28..90bc9183 100755 --- a/app/controllers/origami/addorders_controller.rb +++ b/app/controllers/origami/addorders_controller.rb @@ -38,10 +38,11 @@ class Origami::AddordersController < BaseOrigamiController @booking = @table.get_booking if @booking @booking_id = @booking.booking_id - @obj_order = @booking.orders.first - @customer = @obj_order.customer - @date = @obj_order.created_at - @order_items = @booking.order_items + if @obj_order = @booking.orders.first + @customer = @obj_order.customer + @date = @obj_order.created_at + @order_items = @booking.order_items + end end end @@ -108,21 +109,21 @@ class Origami::AddordersController < BaseOrigamiController items_arr = [] JSON.parse(params[:order_items]).each { |i| i["item_instance_code"] = i["item_instance_code"].downcase.to_s - if i["item_instance_code"].include? "ext" - is_extra_time = true - arr_exts = i["item_instance_code"].split("_") - if arr_exts[1].match(/^(\d)+$/) + if i["item_instance_code"].include? "ext" + is_extra_time = true + arr_exts = i["item_instance_code"].split("_") + if arr_exts[1].match(/^(\d)+$/) time = arr_exts[1].to_i*60*i["quantity"].to_i extra_time = Time.at(time) - end - end - if i["parent_order_item_id"]; - items = {"order_item_id": i["order_item_id"],"item_instance_code": i["item_instance_code"],"quantity": i["quantity"],"parent_order_item_id": i["parent_order_item_id"],"options": JSON.parse(i["options"])} - else + end + end + if i["parent_order_item_id"] + items = {"order_item_id": i["order_item_id"],"item_instance_code": i["item_instance_code"],"quantity": i["quantity"],"parent_order_item_id": i["parent_order_item_id"],"options": JSON.parse(i["options"])} + else items = {"order_item_id": i["order_item_id"],"item_instance_code": i["item_instance_code"],"quantity": i["quantity"],"options": JSON.parse(i["options"])} - end - items_arr.push(items) - } + end + items_arr.push(items) + } # begin if params[:order_source] == "quick_service" && params[:table_id].to_i == 0 customer_id = "CUS-000000000002" # for no customer id from mobile @@ -159,16 +160,13 @@ class Origami::AddordersController < BaseOrigamiController table = DiningFacility.find(@booking.dining_facility_id) type = 'order' from = getCloudDomain #get sub domain in cloud mode - ActionCable.server.broadcast "order_channel",table: table,type:type,from:from - + ActionCable.server.broadcast "order_channel", table: table,type:type,from:from end - if params[:order_source] != "quick_service" && params[:order_source] != "food_court" process_order_queue(@order.order_id,@order.table_id,@order.source) end end - - # Order.send_customer_view(@booking) + # Order.send_customer_view(@booking) if current_user.role != "waiter" && params[:create_type] == "create_pay" if @status && @booking && (@order.source == 'quick_service') || (@order.source == 'food_court') @@ -232,66 +230,34 @@ class Origami::AddordersController < BaseOrigamiController end def process_order_queue(order_id,table_id,order_source) - print_status = nil - cup_status = nil + #Send to background job for processing + order = Order.find(order_id) + sidekiq = Lookup.find_by_lookup_type("sidekiq") - #Send to background job for processing - order = Order.find(order_id) - sidekiq = Lookup.find_by_lookup_type("sidekiq") - if ENV["SERVER_MODE"] != 'cloud' + if ENV["SERVER_MODE"] != 'cloud' + cup_status = `#{"sudo service cups status"}` + if !check_cup_status(cup_status) + cup_start = `#{"sudo service cups start"}` cup_status = `#{"sudo service cups status"}` - print_status = check_cup_status(cup_status) - end - - if print_status - if !sidekiq.nil? - OrderQueueProcessorJob.perform_later(order_id, table_id) - else - if order - oqs = OrderQueueStation.new - oqs.process_order(order, table_id, order_source) - end - # assign_order = AssignedOrderItem.assigned_order_item_by_job(order_id) - # ActionCable.server.broadcast "order_queue_station_channel",order: assign_order - end - else - if ENV["SERVER_MODE"] != 'cloud' - cup_start = `#{"sudo service cups start"}` - cup_status = `#{"sudo service cups status"}` - print_status = check_cup_status(cup_status) - end - - if print_status - if !sidekiq.nil? - OrderQueueProcessorJob.perform_later(order_id, table_id) - else - if order - oqs = OrderQueueStation.new - oqs.process_order(order, table_id, order_source) - end - # assign_order = AssignedOrderItem.assigned_order_item_by_job(order_id) - # ActionCable.server.broadcast "order_queue_station_channel",order: assign_order - end - else - if ENV["SERVER_MODE"] != 'cloud' - from = "" - msg = ' Print Error ! Please contact to service' - ActionCable.server.broadcast "call_waiter_channel",table: msg,time:'print_error',from:from - end - if !sidekiq.nil? - OrderQueueProcessorJob.perform_later(order_id, table_id) - else - if order - oqs = OrderQueueStation.new - oqs.process_order(order, table_id, order_source) - end - - from = getCloudDomain #get sub domain in cloud mode - assign_order = AssignedOrderItem.assigned_order_item_by_job(order_id) - ActionCable.server.broadcast "order_queue_station_channel",order: assign_order,from:from - end + if !check_cup_status(cup_status) + from = '' + msg = 'Print Error ! Please contact to service' + ActionCable.server.broadcast "call_waiter_channel", table: msg, time:'print_error', from: from end end + end + + if !sidekiq.nil? + OrderQueueProcessorJob.perform_later(order_id, table_id) + else + if order + oqs = OrderQueueStation.new + oqs.process_order(order, table_id, order_source) + end + from = getCloudDomain #get sub domain in cloud mode + assign_order = AssignedOrderItem.assigned_order_item_by_job(order_id) + ActionCable.server.broadcast "order_queue_station_channel", order: assign_order, from: from + end end def check_cup_status(status) diff --git a/app/controllers/origami/home_controller.rb b/app/controllers/origami/home_controller.rb index ac105209..5393dc96 100755 --- a/app/controllers/origami/home_controller.rb +++ b/app/controllers/origami/home_controller.rb @@ -4,9 +4,8 @@ class Origami::HomeController < BaseOrigamiController def index @webview = check_mobile - - @tables = Table.unscope(:order).includes(:zone).all.active.order('status desc') - @rooms = Room.unscope(:order).includes(:zone).all.active.order('status desc') + @tables = Table.unscope(:order).includes(:zone, :current_checkin_booking, :current_checkout_booking, :current_reserved_booking).all.active.order('status desc') + @rooms = Room.unscope(:order).includes(:zone, :current_checkin_booking, :current_checkout_booking, :current_reserved_booking).all.active.order('status desc') @complete = Sale.completed_sale("cashier") @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @@ -22,8 +21,8 @@ class Origami::HomeController < BaseOrigamiController @print_settings = PrintSetting.get_precision_delimiter() @webview = check_mobile - @tables = Table.unscope(:order).includes(:zone).all.active.order('status desc') - @rooms = Room.unscope(:order).includes(:zone).all.active.order('status desc') + @tables = Table.unscope(:order).includes(:zone, :current_checkin_booking, :current_checkout_booking, :current_reserved_booking).all.active.order('status desc') + @rooms = Room.unscope(:order).includes(:zone, :current_checkin_booking, :current_checkout_booking, :current_reserved_booking).all.active.order('status desc') @complete = Sale.completed_sale("cashier") @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @customers = Customer.pluck("customer_id, name") @@ -36,75 +35,41 @@ class Origami::HomeController < BaseOrigamiController @shop = shop_detail @membership = MembershipSetting::MembershipSetting @payment_methods = PaymentMethodSetting.all - @dining_booking = @dining.bookings.active.where("DATE_FORMAT(created_at,'%Y-%m-%d') = '#{DateTime.now.strftime('%Y-%m-%d')}' OR DATE_FORMAT(created_at,'%Y-%m-%d') = '#{Date.today.prev_day}' ") - #@dining_booking = @dining.bookings.active.where("created_at between '#{DateTime.now.utc - 12.hours}' and '#{DateTime.now.utc}'") - @order_items = Array.new + @dining_booking = @dining.current_bookings + + @order_items = Array.new @dining_booking.each do |booking| - if booking.sale_id.nil? && booking.booking_status != 'moved' - @order_items = Array.new - # @assigned_order_items = Array.new - if booking.booking_orders.empty? - @booking = booking - else - booking.booking_orders.each do |booking_order| - order = Order.find(booking_order.order_id) - if (order.status == "new") - @obj_order = order - @customer = order.customer - @date = order.created_at - @booking= booking - order.order_items.each do |item| - @order_items.push(item) - # assigned_order_items = AssignedOrderItem.find_by_item_code_and_instance_code_and_order_id(item.item_code,item.item_instance_code,item.order_id) - # if !assigned_order_items.nil? - # @assigned_order_items.push({item.order_items_id => assigned_order_items.assigned_order_item_id}) - # end - end - @account_arr = Array.new - if @customer.tax_profiles - accounts = @customer.tax_profiles - @account_arr =[] - accounts.each do |acc| - account = TaxProfile.find_by_id(acc) - if !account.nil? - @account_arr.push(account) - end - end - end - end - end - end - @status_order = 'order' - else - sale = Sale.find(booking.sale_id) - if sale.sale_status != "completed" && sale.sale_status != 'void' && sale.sale_status != 'spoile' && sale.sale_status != 'waste' - @sale_array.push(sale) - if @status_order == 'order' - @status_order = 'sale' - end - @booking= booking - @date = sale.created_at - @status_sale = 'sale' - @obj_sale = sale - @customer = sale.customer - accounts = @customer.tax_profiles - @account_arr =[] - accounts.each do |acc| - account = TaxProfile.find_by_id(acc) - if !account.nil? - @account_arr.push(account) - end - end - end - @sale_taxes = [] - sale_taxes = SaleTax.where("sale_id = ?", sale.sale_id) - if !sale_taxes.empty? - sale_taxes.each do |sale_tax| - @sale_taxes.push(sale_tax) - end - end + if @obj_sale || @booking.blank? + @booking = booking + end + + if booking.sale_id + @obj_sale = booking.sale + @sale_array.push(@obj_sale) + @sale_taxes = @obj_sale.sale_taxes + @status_sale = 'sale' + else + @order_items += booking.order_items + @obj_order = booking.orders.first + end + + if @obj_sale || @customer.blank? + if obj = @obj_sale || @obj_order + @customer = obj.customer + @date = obj.created_at end - end + end + + if @obj_sale + @status_order = 'sale' + else + @status_order = 'order' + end + + if (@obj_sale || @account_arr.blank?) && @customer + @account_arr = TaxProfile.find_by(id: @customer.tax_profiles) + end + end #for bank integration @checkout_time = Lookup.collection_of('checkout_time') diff --git a/app/controllers/origami/payments_controller.rb b/app/controllers/origami/payments_controller.rb index b6c3e5be..0ce60790 100755 --- a/app/controllers/origami/payments_controller.rb +++ b/app/controllers/origami/payments_controller.rb @@ -31,100 +31,72 @@ class Origami::PaymentsController < BaseOrigamiController end end - # if ENV["SERVER_MODE"] != "cloud" #no print in cloud server - receipt_bill_a5_pdf = Lookup.collection_of("print_settings") #print_settings with name:ReceiptBillA5Pdf - # Print for First Bill to Customer - unique_code = "ReceiptBillPdf" - print_settings = PrintSetting.all - if !print_settings.nil? - print_settings.each do |setting| - if setting.unique_code == 'ReceiptBillPdf' - unique_code = "ReceiptBillPdf" - elsif setting.unique_code == 'ReceiptBillStarPdf' - unique_code = "ReceiptBillStarPdf" - end - end + #shop detail + ## shop_detail = Shop.current_shop + # customer= Customer.where('customer_id=' +.customer_id) + customer = Customer.find(sale_data.customer_id) + # rounding adjustment + if shop_detail.is_rounding_adj + new_total = Sale.get_rounding_adjustment(sale_data.grand_total) + rounding_adj = new_total - sale_data.grand_total + sale_data.update_attributes(grand_total: new_total,old_grand_total: sale_data.grand_total,rounding_adjustment:rounding_adj) if rounding_adj > 0 + end + #end rounding adjustment + #record for sale audit + action_by = current_user.name + type = "FIRST_BILL" + + remark = "#{action_by} print out first bill for Receipt No #{sale_data.receipt_no}" + sale_audit = SaleAudit.record_audit_sale(sale_id,remark,action_by,type ) + # get member information + rebate = MembershipSetting.find_by_rebate(1) + if customer.membership_id != nil && rebate + # member_info = Customer.get_member_account(customer) + # current_balance = SaleAudit.paymal_search(sale_id) + current_balance = 0 + end + + # find order id by sale id + # sale_order = SaleOrder.find_by_sale_id(@sale_data.sale_id) + + # Calculate price_by_accounts + item_price_by_accounts = SaleItem.calculate_price_by_accounts(sale_items) + discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(sale_items) + + other_amount = SaleItem.calculate_other_charges(sale_items) + + print_settings = PrintSetting.where("unique_code REGEXP ?", "receipt.*bill.*pdf").first + printer = Printer::ReceiptPrinter.new(print_settings) + + #TODO :: KBZPAY ( QR ) + # On/Off setting ( show or not qr ) + # qrCode = "00020101021202021110500346KBZ005ab0ed5c1ed09d1c4585ff1313170389160831435294600062000040732kp1e78f7efddca190042638341afb88d50200006KBZPay0106KBZPay5303MMK5802MM62170813PAY_BY_QRCODE64060002my6304FBBD" + kbz_pay_method = PaymentMethodSetting.where(:payment_method => KbzPay::KBZ_PAY).last + + status = false + qr = nil + + if !kbz_pay_method.nil? + if kbz_pay_method.is_active == true + sale_payment = SalePayment.new + sale_payment.process_kbz_payment(sale_id, sale_data.grand_total, 0, 'pending') + + status, qr = KbzPay.pay(sale_data.grand_total.to_i, sale_payment.sale_payment_id, kbz_pay_method.gateway_url, kbz_pay_method.auth_token, kbz_pay_method.merchant_account_id, kbz_pay_method.additional_parameters) end + end - if !receipt_bill_a5_pdf.empty? - receipt_bill_a5_pdf.each do |receipt_bilA5| - if receipt_bilA5[0] == 'ReceiptBillA5Pdf' - if receipt_bilA5[1] == '1' - unique_code = "ReceiptBillA5Pdf" - else - unique_code = unique_code#{}"ReceiptBillPdf" - end - end - end - end + filename, receipt_no, cashier_printer = printer.print_receipt_bill(print_settings, status, qr, cashier_terminal,sale_items,sale_data,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info, shop_detail, "Frt",current_balance,nil,other_amount,nil,nil,nil) - #shop detail - ## shop_detail = Shop.current_shop - # customer= Customer.where('customer_id=' +.customer_id) - customer = Customer.find(sale_data.customer_id) - # rounding adjustment - if shop_detail.is_rounding_adj - new_total = Sale.get_rounding_adjustment(sale_data.grand_total) - rounding_adj = new_total - sale_data.grand_total - sale_data.update_attributes(grand_total: new_total,old_grand_total: sale_data.grand_total,rounding_adjustment:rounding_adj) if rounding_adj > 0 - end - #end rounding adjustment - #record for sale audit - action_by = current_user.name - type = "FIRST_BILL" + result = { + :filepath => filename, + :printer_model => print_settings.brand_name, + :printer_url => print_settings.api_settings + } - remark = "#{action_by} print out first bill for Receipt No #{sale_data.receipt_no}" - sale_audit = SaleAudit.record_audit_sale(sale_id,remark,action_by,type ) - # get member information - rebate = MembershipSetting.find_by_rebate(1) - if customer.membership_id != nil && rebate - # member_info = Customer.get_member_account(customer) - # current_balance = SaleAudit.paymal_search(sale_id) - current_balance = 0 - end - # get printer info - print_settings=PrintSetting.find_by_unique_code(unique_code) + # status, qr = KbzPay.query(sale_payment.sale_payment_id) - # find order id by sale id - # sale_order = SaleOrder.find_by_sale_id(@sale_data.sale_id) - - # Calculate price_by_accounts - item_price_by_accounts = SaleItem.calculate_price_by_accounts(sale_items) - discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(sale_items) - - other_amount = SaleItem.calculate_other_charges(sale_items) - - printer = Printer::ReceiptPrinter.new(print_settings) - - #TODO :: KBZPAY ( QR ) - # On/Off setting ( show or not qr ) - # qrCode = "00020101021202021110500346KBZ005ab0ed5c1ed09d1c4585ff1313170389160831435294600062000040732kp1e78f7efddca190042638341afb88d50200006KBZPay0106KBZPay5303MMK5802MM62170813PAY_BY_QRCODE64060002my6304FBBD" - kbz_pay_method = PaymentMethodSetting.where(:payment_method => KbzPay::KBZ_PAY).last - - status = false - qr = nil - - if !kbz_pay_method.nil? - if kbz_pay_method.is_active == true - sale_payment = SalePayment.new - sale_payment.process_kbz_payment(sale_id, sale_data.grand_total, 0, 'pending') - - status, qr = KbzPay.pay(sale_data.grand_total.to_i, sale_payment.sale_payment_id, kbz_pay_method.gateway_url, kbz_pay_method.auth_token, kbz_pay_method.merchant_account_id, kbz_pay_method.additional_parameters) - end - end - - filename, receipt_no, cashier_printer = printer.print_receipt_bill(print_settings, status, qr, cashier_terminal,sale_items,sale_data,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info, shop_detail, "Frt",current_balance,nil,other_amount,nil,nil,nil) - - result = { - :filepath => filename, - :printer_model => print_settings.brand_name, - :printer_url => print_settings.api_settings - } - - # status, qr = KbzPay.query(sale_payment.sale_payment_id) - - # Mobile Print - render :json => result.to_json + # Mobile Print + render :json => result.to_json # end end diff --git a/app/models/assigned_order_item.rb b/app/models/assigned_order_item.rb index c1b0162e..d77248d8 100755 --- a/app/models/assigned_order_item.rb +++ b/app/models/assigned_order_item.rb @@ -41,12 +41,12 @@ class AssignedOrderItem < ApplicationRecord def self.assigned_order_item_by_job(order_id) order_item = AssignedOrderItem.select("assigned_order_items.assigned_order_item_id, - assigned_order_items.order_queue_station_id, - oqs.id as station_id, oqs.station_name, - oqs.is_active, oqpz.zone_id, - df.name as zone, df.type as table_type, - odt.order_id, odt.item_code, odt.item_instance_code, odt.item_name, - odt.price, odt.qty, odt.item_order_by, odt.options, + assigned_order_items.order_queue_station_id, + oqs.id as station_id, oqs.station_name, + oqs.is_active, oqpz.zone_id, + df.name as zone, df.type as table_type, + odt.order_id, odt.item_code, odt.item_instance_code, odt.item_name, + odt.price, odt.qty, odt.item_order_by, odt.options, cus.name as customer_name, odt.created_at") .joins(" left join order_queue_stations as oqs on oqs.id = assigned_order_items.order_queue_station_id left join order_queue_process_by_zones as oqpz on oqpz.order_queue_station_id = oqs.id @@ -62,6 +62,11 @@ class AssignedOrderItem < ApplicationRecord return order_item end + protected + def self.generate_ids(count = 1) + SeedGenerator.generate_ids(self.name, "AOI", count) + end + private def generate_custom_id if self.assigned_order_item_id.nil? diff --git a/app/models/booking.rb b/app/models/booking.rb index 9ca45ec4..f99df507 100755 --- a/app/models/booking.rb +++ b/app/models/booking.rb @@ -9,8 +9,11 @@ class Booking < ApplicationRecord has_many :booking_orders has_many :orders, :through => :booking_orders has_many :order_items, :through => :orders + scope :active, -> {where("booking_status != 'moved'")} scope :today, -> {where("created_at >= #{Time.now.utc}")} + scope :assign, -> { where(booking_status: 'assign')} + scope :within_time_limit, -> { where(checkin_at: Lookup.get_checkin_time_limit.hours.ago..DateTime::Infinity.new) } def self.sync_booking_records(bookings) if !bookings.nil? diff --git a/app/models/dining_facility.rb b/app/models/dining_facility.rb index d759ba73..052c4a69 100755 --- a/app/models/dining_facility.rb +++ b/app/models/dining_facility.rb @@ -3,6 +3,12 @@ class DiningFacility < ApplicationRecord has_many :dining_charges has_many :in_juties + has_many :bookings + has_many :current_bookings, -> { left_joins(:sale).assign.within_time_limit.merge(Booking.where(checkout_at: nil).or(Booking.merge(Sale.where(sale_status: ['new', nil])))) }, class_name: "Booking" + has_one :current_checkin_booking, -> { assign.within_time_limit.where(checkout_at: nil) }, class_name: "Booking" + has_one :current_checkout_booking, -> { left_joins(:sale).assign.within_time_limit.where.not(checkout_at: nil).merge(Sale.where(sale_status: ['new', nil])) }, class_name: "Booking" + has_one :current_reserved_booking, -> { left_joins(:sale).assign.within_time_limit.where.not(reserved_at: nil).merge(Sale.where(sale_status: nil)) }, class_name: "Booking" + TABLE_TYPE = "Table" ROOM_TYPE = "Room" @@ -21,7 +27,7 @@ class DiningFacility < ApplicationRecord end def get_booking - booking = self.get_current_booking + booking = self.current_checkin_booking if booking if booking.dining_facility_id.to_i == self.id if booking.booking_status == 'assign' @@ -36,23 +42,8 @@ class DiningFacility < ApplicationRecord Booking.where(dining_facility_id: self.id, booking_status: 'assign', checkout_at: nil).where("checkin_at > ?", checkin_time_lookup.hours.ago).first #and checkout_at is null end - def get_moved_booking - checkin_time_lookup = Lookup.get_checkin_time_limit - Booking.where(dining_facility_id: self.id, booking_status: 'moved', checkout_at: nil).where("checkin_at > ?", checkin_time_lookup.hours.ago).first - end - - def get_new_booking - # query for new - Booking.where(dining_facility_id: self.id, booking_status: 'assign', sale_id: nil, checkout_at: nil).first - end - - def get_current_checkout_booking - checkin_time_lookup = Lookup.get_checkin_time_limit - Booking.where(dining_facility_id: self.id, booking_status: 'assign', checkout_at: nil).where.not(reserved_at: nil).where("checkin_at > ?", checkin_time_lookup.hours.ago).first - end - def get_checkout_booking - booking = self.get_current_checkout_booking + booking = self.current_reserved_booking if booking lookup_checkout_time = Lookup.collection_of("checkout_alert_time") free_time_min = 0 @@ -91,7 +82,7 @@ class DiningFacility < ApplicationRecord def self.get_checkin_booking checkin_time_lookup = Lookup.get_checkin_time_limit - bookings = Booking.where(booking_status: 'assign', checkout_at: nil).where.not(reserved_at: nil).where("checkin_at > ?", checkin_time_lookup.hours.ago) + bookings = self.current_checkin_booking arr_booking = Array.new if bookings lookup_checkout_time = Lookup.collection_of("checkout_alert_time") diff --git a/app/models/lookup.rb b/app/models/lookup.rb index ac7bd6da..a9cb2348 100755 --- a/app/models/lookup.rb +++ b/app/models/lookup.rb @@ -57,7 +57,7 @@ class Lookup < ApplicationRecord end def self.collection_of(type) - Lookup.select("name, value").where("lookup_type" => type ).map { |l| [l.name, l.value] } + Lookup.where("lookup_type" => type ).pluck("name, value") end def self.create_shift_sale_lookup diff --git a/app/models/menu_item.rb b/app/models/menu_item.rb index 59791cb2..4735e6d8 100755 --- a/app/models/menu_item.rb +++ b/app/models/menu_item.rb @@ -31,26 +31,24 @@ class MenuItem < ApplicationRecord # Work with item_code = item_instance_code def self.search_by_item_code(item_code) - menu_item_hash = Hash.new - mt_instance = MenuItemInstance.find_by_item_instance_code(item_code) - if (!mt_instance.nil?) - menu_item = MenuItem.find(mt_instance.menu_item_id) - menu_item_hash[:type] = menu_item.type - menu_item_hash[:account_id] = menu_item.account_id - menu_item_hash[:item_code] = menu_item.item_code - menu_item_hash[:item_instance_code] = mt_instance.item_instance_code - menu_item_hash[:name] = menu_item.name.to_s + " - " + mt_instance.item_instance_name.to_s - menu_item_hash[:alt_name] = menu_item.alt_name.to_s # + " - " + mt_instance.item_instance_name.to_s - menu_item_hash[:price] = mt_instance.price - menu_item_hash[:promotion_price] = mt_instance.promotion_price - menu_item_hash[:is_on_promotion] = mt_instance.is_on_promotion - menu_item_hash[:is_available] = mt_instance.is_available - menu_item_hash[:taxable] = menu_item.taxable - - return menu_item_hash - end - - return nil + MenuItem.joins(:menu_item_instances) + .where(menu_item_instances: {item_instance_code: item_code}) + .pluck(:type, :account_id, :item_code, :item_instance_code, :name, :alt_name, "menu_item_instances.item_instance_name AS item_instance_name", :price, :promotion_price, :is_on_promotion, "menu_item_instances.is_available", :taxable) + .map { |type, account_id, item_code, item_instance_code, item_name, item_alt_name, item_instance_name, price, promotion_price, is_on_promotion, is_available, taxable| + { + type: type, + account_id: account_id, + item_code: item_code, + item_instance_code: item_instance_code, + name: item_name.to_s + (' - ' + item_instance_name.to_s) || '', + alt_name: item_alt_name || '', + price: price, + promotion_price: promotion_price, + is_on_promotion: is_on_promotion, + is_available: is_available, + taxable: taxable + } + } end def self.deleteRecursive(menu_item) diff --git a/app/models/order.rb b/app/models/order.rb index cd350e34..09caef45 100755 --- a/app/models/order.rb +++ b/app/models/order.rb @@ -26,16 +26,11 @@ class Order < ApplicationRecord def generate booking = nil if self.new_booking - if self.table_id.to_i > 0 - table_id = self.table_id - else - table_id = nil - end #add extra time if self.is_extra_time && self.extra_time booking = Booking.create({:dining_facility_id => table_id,:type => "TableBooking", - :checkin_at => Time.now.utc,:checkout_at => Time.now.utc + self.extra_time.to_i, - :checkin_by => self.employee_name, + :checkin_at => Time.now.utc, :checkout_at => Time.now.utc + self.extra_time.to_i, + :checkin_by => self.employee_name, :booking_status => "assign" }) else booking = Booking.create({:dining_facility_id => table_id,:type => "TableBooking", @@ -50,7 +45,6 @@ class Order < ApplicationRecord # table.status = "occupied" # table.save end - else booking = Booking.find(self.booking_id) #add extra time @@ -70,7 +64,7 @@ class Order < ApplicationRecord self.adding_line_items #Add Order Table and Room relation afrer order creation - BookingOrder.create({:booking_id => booking.booking_id, :order => self}) + booking.orders << self #Send order to queue one it done! # if self.source != "quick_service" @@ -107,7 +101,7 @@ class Order < ApplicationRecord self.adding_line_items #Add Order Table and Room relation afrer order creation - BookingOrder.create({:booking_id => booking.booking_id, :order => self}) + booking.orders << self #Send order to queue one it done! # if self.source != "quick_service" @@ -118,7 +112,6 @@ class Order < ApplicationRecord send_order_broadcast(booking) return true, booking - end return false @@ -133,49 +126,49 @@ class Order < ApplicationRecord def adding_line_items if self.items #re-order to - ordered_list = re_order_items(self.items) - + items = re_order_items(self.items) #loop to add all items to order - ordered_list.each do |item| + item_instance_codes = items.map { |i| i[:item_instance_code] } + menu_items = MenuItem.search_by_item_code(item_instance_codes) + menu_items += Product.search_by_product_code(item_instance_codes) if menu_items.length < item_instance_codes.length - menu_item = MenuItem.search_by_item_code(item[:item_instance_code]) - - # For Product while item code not in menu item - if menu_item.nil? - menu_item = Product.search_by_product_code(item[:item_instance_code]) - end - - #if (!menu_item.nil?) - # Rails.logger.debug menu_item - set_order_items = Array.new - ##If menu Item set item - must add child items to order as well, where price is only take from menu_item - if (menu_item[:type] == "SetMenuItem") - if (item.include? 'sub_items') || (item.include? :sub_items) - item[:sub_items].each do |si| - # Retrive instance's Price - set_item = MenuItem.search_by_item_code(si[:item_instance_code]) - set_order_items.push({"item_instance_code"=>si[:item_instance_code], "item_instance_name"=>set_item[:name], "quantity"=>si[:quantity], "price"=>set_item[:price], "options"=>si[:options]}) - end - end - set_order_items = set_order_items.to_json - else - set_order_items = nil + new_order_items = [] + items.each do |order_item| + menu_item = menu_items.find { |i| i[:item_instance_code].downcase == order_item[:item_instance_code].downcase } + sub_order_items = [] + if order_item[:sub_items].length > 0 + sub_menu_items = MenuItem.search_by_item_code(order_item[:sub_items].map { |i| i[:item_instance_code] }) + order_item[:sub_items].each do |sub_order_item| + sub_menu_item = sub_menu_items.find { |i| i[:item_instance_code] == sub_order_item[:item_instance_code] } + sub_order_items << { item_instance_code: sub_order_item[:item_instance_code], item_instance_name: sub_menu_item[:name], quantity: sub_order_item[:quantity], price: sub_menu_item[:price], options: sub_order_item[:options] } end + end + sub_order_items = sub_order_items.to_json + new_order_items << OrderItem.new({ + order_id: id, + item_code: menu_item[:item_code], + item_instance_code: order_item[:item_instance_code], + item_name: menu_item[:name], + alt_name: menu_item[:alt_name], + account_id: menu_item[:account_id], + qty: order_item[:quantity], + price: menu_item[:price], + options: order_item[:options], + set_menu_items: sub_order_items, + item_order_by: employee_name, + taxable: menu_item[:taxable] + }) + end - # not insert with price 0 - # puts item[:price] - # puts item - # if(item[:price] != 0 ) - # OrderItem.processs_item(menu_item[:item_code], menu_item[:name], menu_item[:account_id], - # item[:quantity],menu_item[:price], item[:options], set_order_items, self.id, - # self.employee_name) - # end + ids = OrderItem.generate_ids(new_order_items.length) + new_order_items.each_with_index do |order_item, index| + order_item.order_items_id = ids[index] + end - OrderItem.processs_item(menu_item[:item_code], item[:item_instance_code], menu_item[:name], menu_item[:alt_name], menu_item[:account_id], - item[:quantity],menu_item[:price], item[:options], set_order_items, self.id, - self.employee_name, menu_item[:taxable]) + OrderItem.import new_order_items, validate: false - #end + new_order_items.each do |order_item| + order_item.run_callbacks(:save) { true } end self.item_count = self.order_items.count @@ -186,7 +179,6 @@ class Order < ApplicationRecord self.errors.add(:order_items, :blank, message: "Order items cannot be blank") return false end - end def update_items_status_to_billed(items) @@ -213,66 +205,8 @@ class Order < ApplicationRecord end protected - def re_order_items(form_items) #reorder inputs items as parents and child - parent_id = Array.new - parents = Array.new - parents_and_children_items = Array.new - - new_items_list = Array.new - - form_items.each do |parent| - if !parent[:parent_order_item_id].nil? - if (!parent_id.include?(parent[:parent_order_item_id])) - parent_id.push(parent[:parent_order_item_id]) - - end - end - end - Rails.logger.debug "Parent Id count -> " + parent_id.count.to_s - - - parent_id.each do |pid| - form_items.each do |item| - Rails.logger.debug "Adding - Parents -> " + pid.to_s + " - " + item[:order_item_id].to_s - if (pid == item[:order_item_id]) - parents.push(item) - end - end - end - Rails.logger.debug "Parents count -> " + parents.count.to_s - - parents.each do |parent| - children = Array.new - form_items.each do |item| - if (parent[:order_item_id] == item[:parent_order_item_id] ) - children.push(item) - #Items to remove for new list - parents_and_children_items.push(item) - end - end - parent[:sub_items] = children - end - Rails.logger.debug "Parent/children Items to remove -> " + parents_and_children_items.count.to_s - - #Remove process items - #c = a.reject{ |e| b.include? e } - - new_items_list = form_items - parents_and_children_items - - - Rails.logger.debug "New list count -> " + new_items_list.count.to_s - - #Add parent to the list - #new_items_list = new_items_list + parents - - Rails.logger.debug "Re-Order List (Parent)-" - - Rails.logger.debug parents - - Rails.logger.debug "Re-Order List -" - Rails.logger.debug new_items_list - - return new_items_list + def re_order_items(items) #reorder inputs items as parents and child + new_items = items.select { |i| i[:parent_order_item_id].blank? }.map { |x| x[:sub_items] = items.select { |y| x[:order_item_id] == y[:parent_order_item_id] }; x } end diff --git a/app/models/order_item.rb b/app/models/order_item.rb index 3e75ecba..e696bf5a 100755 --- a/app/models/order_item.rb +++ b/app/models/order_item.rb @@ -5,8 +5,8 @@ class OrderItem < ApplicationRecord before_create :generate_custom_id #Associations - belongs_to :order, autosave: true - # belongs_to :order, counter_cache: true + belongs_to :order, autosave: true + # belongs_to :order, counter_cache: true #Validation validates_presence_of :item_code, :item_name, :qty @@ -102,7 +102,13 @@ class OrderItem < ApplicationRecord end end + protected + def self.generate_ids(count = 1) + SeedGenerator.generate_ids(self.name, "ODI", count) + end + private + def generate_custom_id if self.order_items_id.nil? self.order_items_id = SeedGenerator.generate_id(self.class.name, "ODI") diff --git a/app/models/order_queue_station.rb b/app/models/order_queue_station.rb index 6d8830f8..da7be3c2 100755 --- a/app/models/order_queue_station.rb +++ b/app/models/order_queue_station.rb @@ -5,7 +5,7 @@ class OrderQueueStation < ApplicationRecord has_many :assigned_order_items has_many :order_items - has_many :order_queue_process_by_zones + has_many :order_queue_process_by_zones has_many :zones, through: :order_queue_process_by_zones belongs_to :employee @@ -14,110 +14,53 @@ class OrderQueueStation < ApplicationRecord # validations validates_presence_of :station_name, :printer_name - def process_order (order, table_id, order_source = nil, pdf_status = nil ,change_to=nil,current_user=nil) + def process_order(order, table_id, order_source = nil, pdf_status = nil ,change_to=nil, current_user=nil) oqs_stations = OrderQueueStation.active - - order_items = order.order_items if table_id.to_i > 0 - # get dining - dining = DiningFacility.find(table_id) - oqs_by_zones = OrderQueueProcessByZone.where("zone_id=#{dining.zone_id}") - booking = Booking.find_by_dining_facility_id(dining.id) - - # ToDo per item per printer + # get dining + dining = DiningFacility.find(table_id) + oqs_by_zones = OrderQueueProcessByZone.where("zone_id=#{dining.zone_id}").pluck(:order_queue_station_id) + oqs_stations = oqs_stations.select { |s| oqs_by_zones.include? s.id } + end - oqs_by_zones.each do |oqpbz| - oqs = OrderQueueStation.find(oqpbz.order_queue_station_id) - is_auto_printed = false - oqs_order_items = [] + assigned_order_items = [] + oqs_order_items_by_zones = [] - if oqs.is_active - #Get List of items - - pq_items = JSON.parse(oqs.processing_items) - #Loop through the processing items - pq_items.each do |pq_item| - #Processing through the looping items - order_items.each do |order_item| - if (pq_item == order_item.item_code) - # if oqs.id == oqpbz.order_queue_station_id - # #Same Order_items can appear in two location. - # AssignedOrderItem.assigned_order_item(order, order_item.item_code, oqs) - # else - - if (order_item.qty > 0) - if pdf_status.nil? - AssignedOrderItem.assigned_order_item(order, order_item.item_code, order_item.item_instance_code, oqs) - end - oqs_order_items.push(order_item) - end - # end - end - end + # ToDo per item per printer + oqs_stations.each do |oqs| + oqs_order_items = nil + oqs_order_items = order_items.select { |i| JSON.parse(oqs.processing_items).include? i.item_code } + assigned_order_items += oqs_order_items.map { |i| AssignedOrderItem.new({ order: order, item_code: i.item_code, instance_code: i.item_instance_code, order_queue_station: oqs, print_status: false, delivery_status: false }) } + oqs_order_items_by_zones << { oqs: oqs, oqs_order_items: oqs_order_items } + + if oqs.auto_print && order_source != "quick_service" + if oqs_order_items.length > 0 + if oqs.cut_per_item + print_slip_item(oqs, order, oqs_order_items, pdf_status, change_to, current_user, table_id) + else + print_slip(oqs, order, oqs_order_items, pdf_status, change_to, current_user, table_id) end - - if oqs.auto_print && order_source != "quick_service" - if oqs_order_items.length > 0 - if oqs.cut_per_item - print_slip_item(oqs, order, oqs_order_items,pdf_status,change_to,current_user,table_id) - else - print_slip(oqs, order, oqs_order_items,pdf_status,change_to,current_user,table_id) - end - is_auto_printed = true - end - end end end - else - oqs_stations.each do |oqs| - is_auto_printed = false - oqs_order_items = [] + end - if oqs.is_active - #Get List of items - - pq_items = JSON.parse(oqs.processing_items) - #Loop through the processing items - pq_items.each do |pq_item| - #Processing through the looping items - order_items.each do |order_item| - if (pq_item == order_item.item_code) - # if oqs.id == oqpbz.order_queue_station_id - # #Same Order_items can appear in two location. - # AssignedOrderItem.assigned_order_item(order, order_item.item_code, oqs) - # else - - if (order_item.qty > 0) - if pdf_status.nil? - AssignedOrderItem.assigned_order_item(order, order_item.item_code, order_item.item_instance_code, oqs) - end - oqs_order_items.push(order_item) - end - # end - end - end - end - - if oqs.auto_print && order_source != "quick_service" - if oqs_order_items.length > 0 - if oqs.cut_per_item - print_slip_item(oqs, order, oqs_order_items,pdf_status,change_to,current_user,table_id) - else - print_slip(oqs, order, oqs_order_items,pdf_status,change_to,current_user,table_id) - end - is_auto_printed = true - end - end - end + if pdf_status.nil? + ids = AssignedOrderItem.generate_ids(assigned_order_items.length) + assigned_order_items.each_with_index do |assigned_order_item, index| + assigned_order_item.assigned_order_item_id = ids[index] end - end #end else + + AssignedOrderItem.import assigned_order_items, validate: false + end end - def pay_process_order_queue (order_id, table_id) + def pay_process_order_queue (order_id, table_id) oqs_stations = OrderQueueStation.active - + order = Order.find(order_id) order_items = order.order_items @@ -129,22 +72,22 @@ class OrderQueueStation < ApplicationRecord # assign_order = AssignedOrderItem.assigned_order_item_by_job(order_id) # if ENV["SERVER_MODE"] == 'cloud' # from = request.subdomain + "." + request.domain - # else + # else # from = "" # end # ActionCable.server.broadcast "order_queue_station_channel",order: assign_order,from:from if table_id.to_i > 0 - # get dining - dining = DiningFacility.find(table_id) + # get dining + dining = DiningFacility.find(table_id) oqs_by_zones = OrderQueueProcessByZone.where("zone_id=#{dining.zone_id}") - booking = Booking.find_by_dining_facility_id(dining.id) - + booking = Booking.find_by_dining_facility_id(dining.id) + # ToDo per item per printer oqs_by_zones.each do |oqpbz| oqs = OrderQueueStation.find(oqpbz.order_queue_station_id) - is_auto_printed = false + is_auto_printed = false oqs_order_items = [] if oqs.is_active @@ -157,26 +100,26 @@ class OrderQueueStation < ApplicationRecord if (pq_item == order_item.item_code) if (order_item.qty > 0) oqs_order_items.push(order_item) - end + end end end end - + if oqs.auto_print - if oqs_order_items.length > 0 + if oqs_order_items.length > 0 if oqs.cut_per_item print_slip_item(oqs, order, oqs_order_items) - else + else print_slip(oqs, order, oqs_order_items) end is_auto_printed = true end - end + end end end else oqs_stations.each do |oqs| - is_auto_printed = false + is_auto_printed = false oqs_order_items = [] if oqs.is_active @@ -186,107 +129,63 @@ class OrderQueueStation < ApplicationRecord pq_items.each do |pq_item| #Processing through the looping items order_items.each do |order_item| - if (pq_item == order_item.item_code) + if (pq_item == order_item.item_code) if (order_item.qty > 0) oqs_order_items.push(order_item) - end + end end end end - + if oqs.auto_print - if oqs_order_items.length > 0 + if oqs_order_items.length > 0 if oqs.cut_per_item print_slip_item(oqs, order, oqs_order_items) - else + else print_slip(oqs, order, oqs_order_items) end is_auto_printed = true end - end + end end end - end #end else + end #end else end private #Print order_items in 1 slip def print_slip(oqs, order, order_items ,pdf_status=nil,change_to=nil,current_user=nil,table_id=nil) if pdf_status.nil? - printer = PrintSetting.all.order("id ASC") - unique_code="OrderSummaryPdf" - - if !printer.empty? - printer.each do |printer_setting| - if printer_setting.unique_code == 'OrderSummaryPdf' - unique_code="OrderSummaryPdf" - elsif printer_setting.unique_code == 'OrderSummarySlimPdf' - unique_code="OrderSummarySlimPdf" - elsif printer_setting.unique_code == 'OrderSummarySetPdf' - unique_code="OrderSummarySetPdf" - elsif printer_setting.unique_code == 'OrderSummaryCustomisePdf' - unique_code="OrderSummaryCustomisePdf" - elsif printer_setting.unique_code == 'OrderSummarySetCustomisePdf' - unique_code="OrderSummarySetCustomisePdf" - elsif printer_setting.unique_code == 'OrderSummarySlimCustomisePdf' - unique_code="OrderSummarySlimCustomisePdf" - end - end - end - - print_settings=PrintSetting.find_by_unique_code(unique_code) - order_queue_printer= Printer::OrderQueuePrinter.new(print_settings) - order_queue_printer.print_order_summary(print_settings, oqs,order.order_id, order_items, print_status="") + if print_settings = PrintSetting.where("unique_code REGEXP ?", "order.*summary.*pdf").first + order_queue_printer = Printer::OrderQueuePrinter.new(print_settings) + order_queue_printer.print_order_summary(print_settings, oqs, order.order_id, order_items, print_status="") + end else move_print_pdf(change_to,current_user,table_id,order_items,oqs) end - - assigned =AssignedOrderItem.where("order_id = '#{ order.order_id }'").pluck(:assigned_order_item_id) - AssignedOrderItem.where('assigned_order_item_id IN (?)', assigned).update_all(print_status: true) + + AssignedOrderItem.where("order_id = ?", order.order_id).update_all(print_status: true) end #Print order_item in 1 slip per item def print_slip_item(oqs, order, assigned_items,pdf_status=nil,change_to=nil,current_user=nil,table_id=nil) - + if pdf_status.nil? - printer = PrintSetting.all.order("id ASC") - unique_code="OrderItemPdf" - - if !printer.empty? - printer.each do |printer_setting| - if printer_setting.unique_code == 'OrderItemPdf' - unique_code="OrderItemPdf" - elsif printer_setting.unique_code == 'OrderItemStarPdf' - unique_code="OrderItemStarPdf" - elsif printer_setting.unique_code == 'OrderItemSlimPdf' - unique_code="OrderItemSlimPdf" - elsif printer_setting.unique_code == 'OrderSetItemPdf' - unique_code="OrderSetItemPdf" - elsif printer_setting.unique_code == 'OrderItemCustomisePdf' - unique_code="OrderItemCustomisePdf" - elsif printer_setting.unique_code == 'OrderSetItemCustomisePdf' - unique_code="OrderSetItemCustomisePdf" - elsif printer_setting.unique_code == 'OrderItemSlimCustomisePdf' - unique_code="OrderItemSlimCustomisePdf" - end - end - end - # order_item = OrderItem.where("order_id='#{assigned_item.order_id}' AND item_instance_code='#{assigned_item.instance_code}'").first() - # print when complete click - print_settings=PrintSetting.find_by_unique_code(unique_code) - order_queue_printer= Printer::OrderQueuePrinter.new(print_settings) - if !assigned_items.nil? - assigned_items.each do |order_item| - order_queue_printer.print_order_item(print_settings, oqs,order_item.order_id, order_item.order_items_id, print_status="" ) + # print when complete click + if print_settings = PrintSetting.where("unique_code REGEXP ?", "order.*item.*pdf").first + order_queue_printer = Printer::OrderQueuePrinter.new(print_settings) + if !assigned_items.nil? + assigned_items.each do |order_item| + order_queue_printer.print_order_item(print_settings, oqs,order_item.order_id, order_item.order_items_id, print_status="" ) + end end end else move_print_pdf(change_to,current_user,table_id,assigned_items,oqs) end - - assigned =AssignedOrderItem.where("order_id = '#{ order.order_id }'").pluck(:assigned_order_item_id) - AssignedOrderItem.where('assigned_order_item_id IN (?)', assigned).update_all(print_status: true) + + AssignedOrderItem.where("order_id = ?", order.order_id).update_all(print_status: true) end def move_print_pdf(change_to,current_user,change_from,order_items,oqs) @@ -298,7 +197,7 @@ class OrderQueueStation < ApplicationRecord @moved_by = current_user @date = DateTime.now @shop = Shop.current_shop - unique_code = "MoveTablePdf" + unique_code = "MoveTablePdf" # pdf_no = PrintSetting.where(:unique_code => unique_code).count print_settings = PrintSetting.find_by_unique_code(unique_code) # printer_array = [] @@ -307,10 +206,10 @@ class OrderQueueStation < ApplicationRecord # for i in 0..pdf_no # if i != pdf_no # print_settings = printer_array[i] - printer = Printer::ReceiptPrinter.new(print_settings) + printer = Printer::ReceiptPrinter.new(print_settings) printer.print_move_table(print_settings,@to,@from ,@shop,@date,@type,@moved_by,order_items,oqs) - # end - # end + # end + # end end end end diff --git a/app/models/printer/order_queue_printer.rb b/app/models/printer/order_queue_printer.rb index 5d72773c..9909539b 100755 --- a/app/models/printer/order_queue_printer.rb +++ b/app/models/printer/order_queue_printer.rb @@ -1,41 +1,18 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker - def print_order_item(print_settings,oqs, order_id, order_item_id, print_status, before_updated_qty="", options="") + def print_order_item(print_settings, oqs, order_id, order_item_id, print_status, before_updated_qty="", options="") # Must be one print if print_settings.print_copies == 0 print_settings.print_copies = 1 print_settings.save! end - order_item = print_query('order_item', order_item_id) #OrderItem.find_by_item_code(item_code) + order_item = print_query('order_item', order_item_id) #OrderItem.find_by_item_code(item_code) options = order_item[0].options - # filename = "tmp/order_item_#{order_id}_#{order_item_id}" + ".pdf" - - # pdf = OrderItemPdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty) - print_setting = PrintSetting.all # check for item not to show - pdf = '' # if order_item[0].price != 0 - if !print_setting.empty? - print_setting.each do |print_settings| - if print_settings.unique_code == 'OrderItemPdf' - pdf = OrderItemPdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty) - elsif print_settings.unique_code == 'OrderItemStarPdf' - pdf = OrderItemStarPdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty) - elsif print_settings.unique_code == 'OrderItemSlimPdf' - pdf = OrderItemSlimPdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty) - elsif print_settings.unique_code == 'OrderSetItemPdf' - pdf = OrderSetItemPdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty) - elsif print_settings.unique_code == 'OrderItemCustomisePdf' - pdf = OrderItemCustomisePdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty) - elsif print_settings.unique_code == 'OrderSetItemCustomisePdf' - pdf = OrderSetItemCustomisePdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty) - elsif print_settings.unique_code == 'OrderItemSlimCustomisePdf' - pdf = OrderItemSlimCustomisePdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty) - end - end - end + pdf = print_settings.unique_code.constantize.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty) # end shop = Shop.current_shop @@ -77,9 +54,6 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker print_settings.save! end - print_setting = PrintSetting.all.order("id ASC") - order=print_query('order_summary', order_id) - shop = Shop.current_shop directory_name = 'public/orders_'+shop.shop_code Dir.mkdir(directory_name) unless File.exists?(directory_name) @@ -87,8 +61,8 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker # For Print Per Item if oqs.cut_per_item - order_items.each do|odi| - odi_item=print_query('order_item', odi.order_items_id) + order_items.each do |odi| + odi_item = print_query('order_item', odi.order_items_id) filename = directory_name + "/order_item_#{order_id}" + ".pdf" # filename = "tmp/order_item_#{order_id}" + ".pdf" @@ -97,67 +71,33 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker # check for item not to show #if odi.price != 0 - pdf = OrderItemPdf.new(print_settings,odi_item[0], print_status, options, oqs.use_alternate_name,before_updated_qty) - if !print_setting.empty? - print_setting.each do |print_settings| - if print_settings.unique_code == 'OrderItemPdf' - pdf = OrderItemPdf.new(print_settings,odi_item[0], print_status, options, oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderItemStarPdf' - pdf = OrderItemStarPdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty) - elsif print_settings.unique_code == 'OrderItemSlimPdf' - pdf = OrderItemSlimPdf.new(print_settings,odi_item[0], print_status, options, oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderSetItemPdf' - pdf = OrderSetItemPdf.new(print_settings,odi_item[0], print_status, options, oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderItemCustomisePdf' - pdf = OrderItemCustomisePdf.new(print_settings,odi_item[0], print_status, options, oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderSetItemCustomisePdf' - pdf = OrderSetItemCustomisePdf.new(print_settings,odi_item[0], print_status, options, oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderItemSlimCustomisePdf' - pdf = OrderItemSlimCustomisePdf.new(print_settings,odi_item[0], print_status, options, oqs.use_alternate_name,before_updated_qty) - end - end - end + pdf = print_settings.unique_code.constantize.new(print_settings, odi_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty) - # pdf.render_file "tmp/order_item.pdf" - pdf.render_file filename - if oqs.print_copy - #no print in cloud server - if ENV["SERVER_MODE"] != "cloud" - self.print(filename, oqs.printer_name) - # self.print(filename.gsub(".","-copy."), oqs.printer_name) - end - else - print_settings.print_copies = 1 - print_settings.save! - #no print in cloud server - if ENV["SERVER_MODE"] != "cloud" - self.print(filename, oqs.printer_name) - end + # pdf.render_file "tmp/order_item.pdf" + pdf.render_file filename + if oqs.print_copy + #no print in cloud server + if ENV["SERVER_MODE"] != "cloud" + self.print(filename, oqs.printer_name) + # self.print(filename.gsub(".","-copy."), oqs.printer_name) end + else + print_settings.print_copies = 1 + print_settings.save! + #no print in cloud server + if ENV["SERVER_MODE"] != "cloud" + self.print(filename, oqs.printer_name) + end + end #end end # For Print Order Summary else + order = print_query('order_summary', order_id) + filename = directory_name + "/order_summary_#{order_id}" + ".pdf" # filename = "tmp/order_summary_#{order_id}" + ".pdf" - pdf = OrderSummaryPdf.new(print_settings,order, print_status, order_items, oqs.use_alternate_name,before_updated_qty) - if !print_setting.empty? - print_setting.each do |print_settings| - if print_settings.unique_code == 'OrderSummaryPdf' - pdf = OrderSummaryPdf.new(print_settings,order, print_status, order_items, oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderSummarySlimPdf' - pdf = OrderSummarySlimPdf.new(print_settings,order, print_status, order_items, oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderSummarySetPdf' - pdf = OrderSummarySetPdf.new(print_settings,order, print_status, order_items, oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderSummaryCustomisePdf' - pdf = OrderSummaryCustomisePdf.new(print_settings,order, print_status, order_items, oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderSummarySetCustomisePdf' - pdf = OrderSummarySetCustomisePdf.new(print_settings,order, print_status, order_items, oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderSummarySlimCustomisePdf' - pdf = OrderSummarySlimCustomisePdf.new(print_settings,order, print_status, order_items, oqs.use_alternate_name,before_updated_qty) - end - end - end + pdf = print_settings.unique_code.constantize.new(print_settings, order, print_status, order_items, oqs.use_alternate_name, before_updated_qty) pdf.render_file filename if oqs.print_copy @@ -190,7 +130,7 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker print_setting = PrintSetting.all.order("id ASC") - order=print_query('booking_summary', booking_id) + order = print_query('booking_summary', booking_id) shop = Shop.current_shop directory_name = 'public/orders_'+shop.shop_code @@ -206,69 +146,33 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker # check for item not to show #if odi.price != 0 - pdf = OrderItemPdf.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty) - if !print_setting.empty? - print_setting.each do |print_settings| - if print_settings.unique_code == 'OrderItemPdf' - pdf = OrderItemPdf.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderItemStarPdf' - pdf = OrderItemStarPdf.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderItemSlimPdf' - pdf = OrderItemSlimPdf.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderSetItemPdf' - pdf = OrderSetItemPdf.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderItemCustomisePdf' - pdf = OrderItemCustomisePdf.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderSetItemCustomisePdf' - pdf = OrderSetItemCustomisePdf.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderItemSlimCustomisePdf' - pdf = OrderItemSlimCustomisePdf.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty) - end - end - end - pdf.render_file filename + pdf = print_settings.unique_code.constantize.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty) - if oqs.print_copy - #no print in cloud server - if ENV["SERVER_MODE"] != "cloud" - self.print(filename, oqs.printer_name) - end - #For print copy - # pdf.render_file filename.gsub(".","-copy.") - # self.print(filename.gsub(".","-copy."), oqs.printer_name) - else - print_settings.print_copies = 1 - print_settings.save! - #no print in cloud server - if ENV["SERVER_MODE"] != "cloud" - self.print(filename, oqs.printer_name) - end + pdf.render_file filename + + if oqs.print_copy + #no print in cloud server + if ENV["SERVER_MODE"] != "cloud" + self.print(filename, oqs.printer_name) end + #For print copy + # pdf.render_file filename.gsub(".","-copy.") + # self.print(filename.gsub(".","-copy."), oqs.printer_name) + else + print_settings.print_copies = 1 + print_settings.save! + #no print in cloud server + if ENV["SERVER_MODE"] != "cloud" + self.print(filename, oqs.printer_name) + end + end #end end # For Print Order Summary else # filename = "tmp/booking_summary_#{booking_id}" + ".pdf" filename = directory_name + "/booking_summary_#{booking_id}" + ".pdf" - pdf = OrderSummaryPdf.new(print_settings,order, print_status,oqs.use_alternate_name,before_updated_qty) - - if !print_setting.empty? - print_setting.each do |print_settings| - if print_settings.unique_code == 'OrderSummaryPdf' - pdf = OrderSummaryPdf.new(print_settings,order, print_status,oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderSummarySlimPdf' - pdf = OrderSummarySlimPdf.new(print_settings,order, print_status,oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderSummarySetPdf' - pdf = OrderSummarySetPdf.new(print_settings,order, print_status,oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderSummaryCustomisePdf' - pdf = OrderSummaryCustomisePdf.new(print_settings,order, print_status,oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderSummarySetCustomisePdf' - pdf = OrderSummarySetCustomisePdf.new(print_settings,order, print_status,oqs.use_alternate_name,before_updated_qty) - elsif print_settings.unique_code == 'OrderSummarySlimCustomisePdf' - pdf = OrderSummarySlimCustomisePdf.new(print_settings,order, print_status,oqs.use_alternate_name,before_updated_qty) - end - end - end + pdf = print_settings.unique_code.constantize.new(print_settings,order, print_status,oqs.use_alternate_name,before_updated_qty) pdf.render_file filename if oqs.print_copy @@ -293,36 +197,23 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker # Query for OQS with status def print_query(type, id) + query = OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, order_items.set_menu_items, cus.name as customer, df.type, df.name as dining,item.alt_name as alt_name") + .joins("left join orders ON orders.order_id = order_items.order_id") + .joins("left join booking_orders AS bo ON bo.order_id=order_items.order_id") + .joins("left join bookings AS b ON b.booking_id = bo.booking_id") + .joins("left join dining_facilities AS df ON df.id = b.dining_facility_id") + .joins("left join customers as cus ON cus.customer_id = orders.customer_id") + .joins("left join menu_items as item ON item.item_code = order_items.item_code") + if type == "order_item" - OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, order_items.set_menu_items, cus.name as customer, df.type, df.name as dining,item.alt_name as alt_name") - .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.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 - left join menu_items as item ON item.item_code = order_items.item_code") - .where("order_items.order_items_id = '#{ id }'") + query.where("order_items.order_items_id = '#{ id }'") .group("order_items.item_code") elsif type == "order_summary" - OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, order_items.set_menu_items, cus.name as customer, df.type, df.name as dining,item.alt_name as alt_name") - .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.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 - left join menu_items as item ON item.item_code = order_items.item_code") - .where("orders.order_id = '#{ id }'") + query.where("orders.order_id = '#{ id }'") .group("order_items.order_items_id") else # order summary for booking - OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, order_items.set_menu_items, cus.name as customer, df.type, df.name as dining,item.alt_name as alt_name") - .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.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 - left join menu_items as item ON item.item_code = order_items.item_code") - .where("b.booking_id = '#{ id }'") + query.where("b.booking_id = '#{ id }'") end end diff --git a/app/models/printer/receipt_printer.rb b/app/models/printer/receipt_printer.rb index f7b35a5a..4d96112f 100755 --- a/app/models/printer/receipt_printer.rb +++ b/app/models/printer/receipt_printer.rb @@ -4,26 +4,9 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker #Use CUPS service #Generate PDF #Print - printer = PrintSetting.all - pdf = OrderItemPdf.new + printer = PrintSetting.where("unique_code REGEXP ?", "order.*item.*pdf").first + pdf = printer.unique_code.constantize.new - if !printer.empty? - printer.each do |printer_setting| - if printer_setting.unique_code == 'OrderItemPdf' - pdf = OrderItemPdf.new - elsif printer_setting.unique_code == 'OrderItemSlimPdf' - pdf = OrderItemSlimPdf.new - elsif printer_setting.unique_code == 'OrderSetItemPdf' - pdf = OrderSetItemPdf.new - elsif printer_setting.unique_code == 'OrderItemCustomisePdf' - pdf = OrderItemCustomisePdf.new - elsif printer_setting.unique_code == 'OrderSetItemCustomisePdf' - pdf = OrderSetItemCustomisePdf.new - elsif printer_setting.unique_code == 'OrderItemSlimCustomisePdf' - pdf = OrderItemSlimCustomisePdf.new - end - end - end pdf.render_file "tmp/order_item_queue_#{order_id}_#{order_item_id}" + ".pdf" #no print in cloud server if ENV["SERVER_MODE"] != "cloud" @@ -36,26 +19,9 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker #Generate PDF #Print filename = "tmp/order_summary_#{booking_id}" + ".pdf" - printer = PrintSetting.all - pdf = OrderSummaryPdf.new + printer = PrintSetting.where("unique_code REGEXP ?", "order.*summary.*pdf").first + pdf = printer.unique_code.constantize.new - if !printer.empty? - printer.each do |printer_setting| - if printer_setting.unique_code == 'OrderSummaryPdf' - pdf = OrderSummaryPdf.new - elsif printer_setting.unique_code == 'OrderSummarySlimPdf' - pdf = OrderSummarySlimPdf.new - elsif printer_setting.unique_code == 'OrderSummarySetPdf' - pdf = OrderSummarySetPdf.new - elsif printer_setting.unique_code == 'OrderSummaryCustomisePdf' - pdf = OrderSummaryCustomisePdf.new - elsif printer_setting.unique_code == 'OrderSummarySetCustomisePdf' - pdf = OrderSummarySetCustomisePdf.new - elsif printer_setting.unique_code == 'OrderSummarySlimCustomisePdf' - pdf = OrderSummarySlimCustomisePdf.new - end - end - end pdf.render_file filename #no print in cloud server if ENV["SERVER_MODE"] != "cloud" @@ -67,26 +33,10 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker #Use CUPS service #Generate PDF #Print - printer = PrintSetting.all + printer = PrintSetting.where("unique_code REGEXP ?", "order.*summary.*pdf").first filename = "tmp/order_summary_#{booking_id}" + ".pdf" - pdf = OrderSummaryPdf.new - if !printer.empty? - printer.each do |printer_setting| - if printer_setting.unique_code == 'OrderSummaryPdf' - pdf = OrderSummaryPdf.new - elsif printer_setting.unique_code == 'OrderSummarySlimPdf' - pdf = OrderSummarySlimPdf.new - elsif printer_setting.unique_code == 'OrderSummarySetPdf' - pdf = OrderSummarySetPdf.new - elsif printer_setting.unique_code == 'OrderSummaryCustomisePdf' - pdf = OrderSummaryCustomisePdf.new - elsif printer_setting.unique_code == 'OrderSummarySetCustomisePdf' - pdf = OrderSummarySetCustomisePdf.new - elsif printer_setting.unique_code == 'OrderSummarySlimCustomisePdf' - pdf = OrderSummarySlimCustomisePdf.new - end - end - end + pdf = printer.unique_code.constantize.new + pdf.render_file filename #no print in cloud server if ENV["SERVER_MODE"] != "cloud" @@ -98,26 +48,10 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker #Use CUPS service #Generate PDF #Print - printer = PrintSetting.all + printer = PrintSetting.where("unique_code REGEXP ?", "order.*summary.*pdf").first filename = "tmp/order_summary_#{booking_id}" + ".pdf" - pdf = OrderSummaryPdf.new - if !printer.empty? - printer.each do |printer_setting| - if printer_setting.unique_code == 'OrderSummaryPdf' - pdf = OrderSummaryPdf.new - elsif printer_setting.unique_code == 'OrderSummarySlimPdf' - pdf = OrderSummarySlimPdf.new - elsif printer_setting.unique_code == 'OrderSummarySetPdf' - pdf = OrderSummarySetPdf.new - elsif printer_setting.unique_code == 'OrderSummaryCustomisePdf' - pdf = OrderSummaryCustomisePdf.new - elsif printer_setting.unique_code == 'OrderSummarySetCustomisePdf' - pdf = OrderSummarySetCustomisePdf.new - elsif printer_setting.unique_code == 'OrderSummarySlimCustomisePdf' - pdf = OrderSummarySlimCustomisePdf.new - end - end - end + pdf = printer.unique_code.constantize.new + pdf.render_file filename #no print in cloud server if ENV["SERVER_MODE"] != "cloud" @@ -129,26 +63,10 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker #Use CUPS service #Generate PDF #Print - printer = PrintSetting.all + printer = PrintSetting.where("unique_code REGEXP ?", "order.*summary.*pdf").first filename = "tmp/order_summary_#{booking_id}" + ".pdf" - pdf = OrderSummaryPdf.new - if !printer.empty? - printer.each do |printer_setting| - if printer_setting.unique_code == 'OrderSummaryPdf' - pdf = OrderSummaryPdf.new - elsif printer_setting.unique_code == 'OrderSummarySlimPdf' - pdf = OrderSummarySlimPdf.new - elsif printer_setting.unique_code == 'OrderSummarySetPdf' - pdf = OrderSummarySetPdf.new - elsif printer_setting.unique_code == 'OrderSummaryCustomisePdf' - pdf = OrderSummaryCustomisePdf.new - elsif printer_setting.unique_code == 'OrderSummarySetCustomisePdf' - pdf = OrderSummarySetCustomisePdf.new - elsif printer_setting.unique_code == 'OrderSummarySlimCustomisePdf' - pdf = OrderSummarySlimCustomisePdf.new - end - end - end + pdf = printer.unique_code.constantize.new + pdf.render_file filename #no print in cloud server if ENV["SERVER_MODE"] != "cloud" @@ -160,26 +78,10 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker #Use CUPS service #Generate PDF #Print - printer = PrintSetting.all + printer = PrintSetting.where("unique_code REGEXP ?", "order.*summary.*pdf").first filename = "tmp/order_summary_#{booking_id}" + ".pdf" - pdf = OrderSummaryPdf.new - if !printer.empty? - printer.each do |printer_setting| - if printer_setting.unique_code == 'OrderSummaryPdf' - pdf = OrderSummaryPdf.new - elsif printer_setting.unique_code == 'OrderSummarySlimPdf' - pdf = OrderSummarySlimPdf.new - elsif printer_setting.unique_code == 'OrderSummarySetPdf' - pdf = OrderSummarySetPdf.new - elsif printer_setting.unique_code == 'OrderSummaryCustomisePdf' - pdf = OrderSummaryCustomisePdf.new - elsif printer_setting.unique_code == 'OrderSummarySetCustomisePdf' - pdf = OrderSummarySetCustomisePdf.new - elsif printer_setting.unique_code == 'OrderSummarySlimCustomisePdf' - pdf = OrderSummarySlimCustomisePdf.new - end - end - end + pdf = printer.unique_code.constantize.new + pdf.render_file filename #no print in cloud server if ENV["SERVER_MODE"] != "cloud" @@ -192,31 +94,12 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker #Use CUPS service #Generate PDF #Print - if !printer_settings.nil? - if !printer_settings.unique_code.strip.downcase.include? ("receiptbillorder") - pdf = ReceiptBillPdf.new(printer_settings, kbz_pay_status, qr_code, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount) - settings = PrintSetting.all - if !settings.nil? - settings.each do |setting| - if setting.unique_code == 'ReceiptBillPdf' - pdf = ReceiptBillPdf.new(printer_settings, kbz_pay_status, qr_code, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount) - elsif setting.unique_code == 'ReceiptBillStarPdf' - pdf = ReceiptBillStarPdf.new(printer_settings, kbz_pay_status, qr_code, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount) - end - end - end - - receipt_bill_a5_pdf = Lookup.collection_of("print_settings") #print_settings with name:ReceiptBillA5Pdf - if !receipt_bill_a5_pdf.empty? - receipt_bill_a5_pdf.each do |receipt_bilA5| - if receipt_bilA5[0] == 'ReceiptBillA5Pdf' - if receipt_bilA5[1] == '1' - pdf = ReceiptBillA5Pdf.new(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount) - # else - # pdf = ReceiptBillPdf.new(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount) - end - end - end + if printer_settings + if !printer_settings.unique_code.match?(/receiptbillorder/i) + if Lookup.collection_of("print_settings").any? { |x| x == ["ReceiptBillA5Pdf", "1"] } #print_settings with name:ReceiptBillA5Pdf + pdf = ReceiptBillA5Pdf.new(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount) + else + pdf = PrintSetting.where("unique_code REGEXP ?", "receipt.*bill.*pdf").first.unique_code.constantize.new(printer_settings, kbz_pay_status, qr_code, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount) end else #doemal online order pdf template diff --git a/app/models/product.rb b/app/models/product.rb index 3256fe17..5d1a5fe6 100755 --- a/app/models/product.rb +++ b/app/models/product.rb @@ -5,29 +5,23 @@ class Product < ApplicationRecord mount_uploader :image_path, ProductImageUploader def self.search_by_product_code(item_code) - account = Account.find_by_title('Product') - if !account.nil? - account_id = account.id - else - account_id = 1 - end - - menu_item_hash = Hash.new - mt_instance = Product.find_by_item_code(item_code) - if (!mt_instance.nil?) - menu_item_hash[:type] = 'Product' - menu_item_hash[:account_id] = account_id - menu_item_hash[:item_code] = mt_instance.item_code - menu_item_hash[:item_instance_code] = mt_instance.item_code - menu_item_hash[:name] = mt_instance.name.to_s - menu_item_hash[:alt_name] = mt_instance.alt_name.to_s - menu_item_hash[:price] = mt_instance.unit_price - menu_item_hash[:promotion_price] = 0 - menu_item_hash[:is_on_promotion] = 0 - menu_item_hash[:is_available] = 0 - menu_item_hash[:taxable] = mt_instance.taxable - - return menu_item_hash - end -end + Product.joins("JOIN accounts ON accounts.title = 'Product'") + .where(item_code: item_code) + .pluck("accounts.id AS account_id", :item_code, :name, :alt_name, :unit_price, :taxable) + .map { |account_id, item_code, item_name, item_alt_name, price, taxable| + { + type: 'Product', + account_id: account_id, + item_code: item_code, + item_instance_code: item_code, + name: item_name || '', + alt_name: item_name || '', + price: price, + promotion_price: 0, + is_on_promotion: 0, + is_available: 0, + taxable: taxable + } + } + end end diff --git a/app/models/sale.rb b/app/models/sale.rb index c7a05189..27d0416c 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -684,14 +684,6 @@ class Sale < ApplicationRecord self.total_tax = total_tax_amount end - def product_get_unit_price(item_code) - menu_item_hash =MenuItem.search_by_item_code(item_code) - if (menu_instance_code) - return menu_ item_hash[:item_instance_code], menu_item_hash[:price] - end - return nil,nil - end - def link_order_sale(order_id) #create if it doesn't exist saleOrder = SaleOrder.where("sale_id=? and order_id=?", self.id, order_id).take diff --git a/app/models/seed_generator.rb b/app/models/seed_generator.rb index 2a363dd8..b8224377 100755 --- a/app/models/seed_generator.rb +++ b/app/models/seed_generator.rb @@ -9,13 +9,22 @@ class SeedGenerator < ApplicationRecord cur_val, next_val = self.update_seed(model_name) - if (cur_val == 0) - cur_val, next_val = self.execute_query(model_name) + padding_len = 15 - prefix.length + saleOrderId = prefix +"-"+ cur_val.to_s.to_s.rjust(padding_len,'0') + return saleOrderId + end + + def self.generate_ids(model, prefix, count = 1) + model_name = self.get_model_name(model) + + if ENV["SERVER_MODE"] == 'cloud' + prefix = "C#{prefix}" end - padding_len = 15 - prefix.length - saleOrderId = prefix +"-"+ cur_val.to_s.to_s.rjust((14-prefix.length)+1,'0') - return saleOrderId + start = self.update_seed(model_name, count) + stop = start + count - 1 + length = 15 - prefix.length + (start..stop).map { |c| "#{prefix}-#{c.to_s.rjust(length, '0')}" } end def self.sync_seed_generator_records(seed_generators) @@ -58,7 +67,7 @@ class SeedGenerator < ApplicationRecord end end - return new_receipt_no + return new_receipt_no end # Generate for 4 digit Code @@ -85,7 +94,7 @@ class SeedGenerator < ApplicationRecord # padding_len = 6 - prefix.length # count = 5-prefix.length # end - # next_code = prefix + seed.current.to_s.to_s.rjust((count)+1,'0') + # next_code = prefix + seed.current.to_s.to_s.rjust((count)+1,'0') # return next_code # end @@ -100,41 +109,13 @@ class SeedGenerator < ApplicationRecord return model_name end - def self.execute_query(model) - current = 0 - nex = 0 - - sql = "INSERT INTO seed_generators (model, created_at, updated_at) - VALUES('#{ model }', NOW(), NOW()) - ON DUPLICATE KEY UPDATE current = current + 1, next = next + 1;" - - select_sql = "select * from seed_generators where model='#{model}';" - ActiveRecord::Base.connection.execute(sql); - select_result = ActiveRecord::Base.connection.execute(select_sql); - - select_result.each do |row| - current = row [3] - nex = row[4] + def self.update_seed(model, count = 1) + SeedGenerator.transaction do + seed = SeedGenerator.lock.find_by_model(model) + seed.next = seed.next + (count * seed.increase_by) + seed.current = seed.next - seed.increase_by + seed.save! + seed.next_before_last_save end - - return current, nex - end - - def self.update_seed(model) - current = 0 - nex = 0 - - update_sql = "UPDATE seed_generators set current = next, next = next + 1 WHERE model='#{model}';" - select_sql = "select * from seed_generators where model='#{model}';" - update_result = ActiveRecord::Base.connection.execute(update_sql); - - select_result = ActiveRecord::Base.connection.execute(select_sql); - - select_result.each do |row| - current = row [3] - nex = row[4] - end - - return current, nex end end diff --git a/app/views/origami/addorders/detail.html.erb b/app/views/origami/addorders/detail.html.erb index e7abb58b..daa12b33 100644 --- a/app/views/origami/addorders/detail.html.erb +++ b/app/views/origami/addorders/detail.html.erb @@ -52,7 +52,7 @@ <% end%> <% else %> - <% if @table.get_current_checkout_booking.nil? %> + <% if @table.current_checkout_booking.nil? %> <% if !menu.code.include? "SPL" %>