class DashboardController < ApplicationController def index @from, @to = get_date_range_from_params @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 if current_user.present? && !(current_user.role == 'administrator' || current_user.role == 'manager' || current_user.role == 'account' || current_user.role == 'supervisor') if shift = ShiftSale.current_open_shift(current_user.id) @orders = @orders.where(shift_sale_id: shift.id) @sales = @sales.where(shift_sale_id: shift.id) end end @top_products = Sale.top_bottom_products(current_user,@from,@to,"top") @bottom_products = Sale.top_bottom_products(current_user,@from,@to,"bottom") @hourly_sales = Sale.hourly_sales(current_user,@from,@to) # .group_by_hour(:created_at, :time_zone => 'Asia/Rangoon',format: '%I:%p') # .sum(:grand_total) employee_sales = Sale.employee_sales(current_user,@from,@to) # .sum("(CASE WHEN sp.payment_method='cash' THEN ((sp.payment_amount) - (sales.amount_changed)) ELSE (sp.payment_amount) END)") @employee_sales = [] if !employee_sales.nil? employee_sales.each do |emp| emp_data = [] if emp.payment_amount > 0 emp_data.push([emp.e_name, emp.payment_amount]) @employee_sales.push({'name' => emp.payment_method, 'data' => emp_data}) end end end @inventories = StockJournal.inventory_balances(@from,@to).sum(:balance) @total_trans = Sale.total_trans(current_user,@from,@to) @total_card = Sale.total_card_sale(current_user,@from,@to) @total_credit = Sale.credit_payment(current_user,@from,@to) @sale_data = Array.new @total_payment_methods = Sale.total_payment_methods(current_user,@from,@to) if !@total_payment_methods.nil? @total_payment_methods.each do |payment| pay = Sale.payment_sale(payment.payment_method, current_user,@from,@to) @sale_data.push({payment.payment_method => pay.payment_amount}) end end @summ_sale = Sale.summary_sale_receipt(current_user,@from,@to) @total_customer, @total_dinein, @total_takeaway, @total_membership = Sale.total_customer(current_user,@from,@to) # @total_other_customer = Sale.total_other_customer(today,current_user) @total_order = Sale.total_order(current_user,@from,@to) @total_accounts = Account.select("accounts.id as account_id, accounts.title as title") @account_data = Array.new if !@total_accounts.nil? @total_accounts.each do |account| acc = Sale.account_data(account.account_id,current_user,@from,@to) if !acc.nil? && acc.cnt_acc > 0 @account_data.push({account.title => acc.cnt_acc, account.title + '_amount' => acc.total_acc}) end end @total_accounts = @total_accounts.reject.with_index { |x, i| @account_data[i].nil? } end @top_items = Sale.top_items(current_user,@from,@to) @total_foc_items = Sale.total_foc_items(current_user,@from,@to) # get printer info @print_settings = PrintSetting.get_precision_delimiter() end private def get_date_range_from_params if params[:from].present? && params[:to].present? if params[:from_time].present? && params[:to_time].present? from = Time.parse("#{params[:from]} #{params[:from_time]}") to = Time.parse("#{params[:to]} #{params[:to_time]}") else from = Time.parse(params[:from]) to = Time.parse(params[:to]).end_of_day end else from = Time.now.beginning_of_day to = Time.now.end_of_day end return from, to end end