diff --git a/app/controllers/api/api_controller.rb b/app/controllers/api/api_controller.rb index afcc42a7..4302d6a4 100755 --- a/app/controllers/api/api_controller.rb +++ b/app/controllers/api/api_controller.rb @@ -1,7 +1,10 @@ class Api::ApiController < ActionController::API + + + include MultiTenancy include TokenVerification - include ActionView::Rendering include ActionController::MimeResponds + include ActionView::Rendering before_action :core_allow helper_method :current_token, :current_login_employee, :get_cashier @@ -15,6 +18,12 @@ class Api::ApiController < ActionController::API 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/api/orders_controller.rb b/app/controllers/api/orders_controller.rb index 2b9fbfbf..ab557a69 100755 --- a/app/controllers/api/orders_controller.rb +++ b/app/controllers/api/orders_controller.rb @@ -62,8 +62,8 @@ class Api::OrdersController < Api::ApiController def create Rails.logger.debug "Order Source - " + params[:order_source].to_s Rails.logger.debug "Table ID - " + params[:table_id].to_s - @shop = Shop.find_by_shop_code(params[:shop_code]) - current_shift = ShiftSale.current_shift(@shop.shop_code) + # @shop = Shop.find_by_shop_code(params[:shop_code]) + current_shift = ShiftSale.current_shift if current_shift.nil? @status = false @message = "No Current Open Shift for This Employee" diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 636fdc8e..716af395 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_crm_controller.rb b/app/controllers/base_crm_controller.rb index 2cf47467..275a435d 100755 --- a/app/controllers/base_crm_controller.rb +++ b/app/controllers/base_crm_controller.rb @@ -1,5 +1,8 @@ class BaseCrmController < ActionController::Base - include LoginVerification, MultiTenancy + + + 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..b591fe85 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..776f8749 100755 --- a/app/controllers/base_oqs_controller.rb +++ b/app/controllers/base_oqs_controller.rb @@ -1,5 +1,8 @@ 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 3a609dab..a23ba942 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..021d29c6 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..598b93d6 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/foodcourt/orders_controller.rb b/app/controllers/foodcourt/orders_controller.rb index 42a3ece5..412233b8 100755 --- a/app/controllers/foodcourt/orders_controller.rb +++ b/app/controllers/foodcourt/orders_controller.rb @@ -68,7 +68,7 @@ class Foodcourt::OrdersController < BaseFoodcourtController .joins("JOIN orders ON orders.order_id=booking_orders.order_id") .joins("JOIN order_items ON orders.order_id=order_items.order_id") .joins("JOIN customers ON orders.customer_id=customers.customer_id") - .where("orders.source='app' and bookings.shop_code='#{@shop.shop_code}'").order("bookings.created_at desc").uniq + .where("orders.source='app'").order("bookings.created_at desc").uniq end def completed customer =Customer.find_by_customer_id(params[:customer_id]) diff --git a/app/controllers/origami/home_controller.rb b/app/controllers/origami/home_controller.rb index 9d57e765..b31e1a17 100755 --- a/app/controllers/origami/home_controller.rb +++ b/app/controllers/origami/home_controller.rb @@ -4,9 +4,10 @@ class Origami::HomeController < BaseOrigamiController def index @webview = check_mobile - @shop = Shop.current_shop - @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,9 +22,10 @@ class Origami::HomeController < BaseOrigamiController # get printer info @print_settings = PrintSetting.get_precision_delimiter() @webview = check_mobile - @shop = Shop.current_shop - @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') diff --git a/app/controllers/origami/payments_controller.rb b/app/controllers/origami/payments_controller.rb index 271daf3b..9f9d284f 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) 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/dining_facility.rb b/app/models/dining_facility.rb index f947a0e8..999bcc0b 100755 --- a/app/models/dining_facility.rb +++ b/app/models/dining_facility.rb @@ -32,50 +32,27 @@ class DiningFacility < ApplicationRecord end def get_current_booking - checkin_time_lookup = Lookup.get_checkin_time_limit(self.shop_code) - booking = Booking.where("shop_code='#{self.shop_code}' and 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 - if booking.count > 0 then - return booking[0] - else - return nil - end + + checkin_time_lookup = Lookup.get_checkin_time_limit + 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(self.shop_code) - booking = Booking.where("shop_code='#{self.shop_code}' and 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) + 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 - if booking.count > 0 then - return booking[0] - else - return nil - end 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(self.shop_code) - booking = Booking.where("shop_code='#{self.shop_code}' and 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 + + 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 @@ -117,8 +94,10 @@ class DiningFacility < ApplicationRecord end def self.get_checkin_booking - checkin_time_lookup = Lookup.get_checkin_time_limit(self.shop_code) - bookings = Booking.where("shop_code='#{self.shop_code}' 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") + + 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) + arr_booking = Array.new if bookings lookup_checkout_time = Lookup.where("shop_code='#{self.shop_code}'").collection_of("checkout_alert_time") diff --git a/app/models/lookup.rb b/app/models/lookup.rb index f71be27c..bc7f1518 100755 --- a/app/models/lookup.rb +++ b/app/models/lookup.rb @@ -5,6 +5,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', @@ -24,15 +26,15 @@ class Lookup < ApplicationRecord # Lookup.select("value, name").where("lookup_type = ?", lookup_type ).order("name asc").map { |r| [r.name, r.value] } # end - def self.get_checkin_time_limit(shop_code) - time_limit = 5 - lookup = Lookup.find_by_lookup_type_and_shop_code('checkin_time_limit',shop_code) - if !lookup.nil? - time_limit = lookup.value.to_i - end + def self.time_limit + TIME_LIMIT + end - return time_limit + + def self.get_checkin_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 @@ -59,7 +61,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(shop_code) diff --git a/app/models/sale.rb b/app/models/sale.rb index a92d3b4d..ebcd512b 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -140,8 +140,8 @@ class Sale < ApplicationRecord order = Order.find(order_id) # current cashier login - open_cashier = Employee.where("shop_code='#{order.shop_code}' and role = 'cashier' AND token_session <> ''") - current_shift = ShiftSale.current_shift(order.shop_code) + open_cashier = Employee.where("role = 'cashier' AND token_session <> ''") + current_shift = ShiftSale.current_shift # shift with terminal zone # set cashier @@ -238,7 +238,7 @@ class Sale < ApplicationRecord #fOR Quick Service pay and create def self.request_bill(order,current_user,current_login_employee) - if !ShiftSale.current_shift(order.shop_code).nil? + if !ShiftSale.current_shift.nil? order_id = order.order_id # order_id bk_order = BookingOrder.find_by_order_id(order_id) check_booking = Booking.find_by_booking_id(bk_order.booking_id) @@ -2067,7 +2067,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 7e8cbe1c..a111a2da 100755 --- a/app/models/sale_payment.rb +++ b/app/models/sale_payment.rb @@ -85,7 +85,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 @@ -777,27 +777,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 @@ -969,38 +956,34 @@ class SalePayment < ApplicationRecord end #credit payment query - def self.get_credit_sales(params,shop_code) - receipt_no = "" - customer = "" - if !params["receipt_no"].blank? - receipt_no = " and s.receipt_no LIKE '%#{params["receipt_no"]}%'" + + def self.get_credit_sales(params) + 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.where("s.shop_code='#{shop_code}'").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/models/shift_sale.rb b/app/models/shift_sale.rb index 2bf44dcc..3c13bf6a 100755 --- a/app/models/shift_sale.rb +++ b/app/models/shift_sale.rb @@ -17,9 +17,9 @@ class ShiftSale < ApplicationRecord belongs_to :employee, :foreign_key => 'employee_id' has_many :sales - def self.current_shift(shop_code) + def self.current_shift # today_date = DateTime.now.strftime("%Y-%m-%d") - shift = ShiftSale.where("shop_code='#{shop_code}' and shift_started_at is not null and shift_closed_at is null").first + shift = ShiftSale.where("shift_started_at is not null and shift_closed_at is null").first return shift end 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 %>