class Foodcourt::PaymentsController < BaseFoodcourtController
  authorize_resource :class => false
  def index
  end

  def create
    cash        = params[:cash]
    sale_id     = params[:sale_id]
    member_info = nil
    type        = params[:type]
    tax_type    = params[:tax_type]
    path = request.fullpath
    latest_order_no = nil
    is_kbz = params[:is_kbz]
    account_no =params[:account_no]

    if(Sale.exists?(sale_id))
      saleObj = Sale.find(sale_id)
      sale_items = SaleItem.get_all_sale_items(sale_id)

      sp = SalePayment.where('sale_id=? and payment_method=? and payment_status=?', sale_id, 'kbzpay', 'paid').last
      if is_kbz == 'false'
        Rails.logger.info '################ CASH PAYMENT #################'
        sale_payment = SalePayment.new
        sale_payment.process_payment(saleObj, current_user, cash, "cash")
      else
        sp.kbz_edit_sale_payment(sp.received_amount.to_f, current_user)
      end

      if !path.include? ("credit_payment")
        rebate_amount = nil
        # For Cashier by Zone
        # bookings = Booking.where("sale_id='#{sale_id}'")
        bookings = Booking.find_by_sale_id(sale_id)

        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)
            cashier_zone = CashierTerminalByZone.find_by_zone_id(table.zone_id)
            cashier_terminal = CashierTerminal.find(cashier_zone.cashier_terminal_id)

            type  = 'payment'
            from = getCloudDomain #get sub domain in cloud mode
            ActionCable.server.broadcast "order_channel",table: table,type:type,from:from
          else
            shift = ShiftSale.find(saleObj.shift_sale_id)
            cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id)
          end
        end

        # For Print
        # if ENV["SERVER_MODE"] != "cloud" #no print in cloud server
        if Lookup.collection_of("print_settings").any? { |x| x == ["ReceiptBillA5Pdf", "1"] } #print_settings with name:ReceiptBillA5Pdf
          unique_code = "ReceiptBillA5Pdf"
        else
          unique_code = PrintSetting.where("unique_code REGEXP ?", "receipt.*bill.*pdf").first.unique_code
        end

        customer = saleObj.customer

        # get member information
        rebate = MembershipSetting.find_by_rebate(1)
        credit_data = SalePayment.find_by_sale_id_and_payment_method(sale_id,'creditnote')

        if customer.membership_id != nil && rebate && credit_data.nil?
          member_info    = Customer.get_member_account(customer)

          if member_info["status"] == true
            rebate_amount  = Customer.get_membership_transactions(customer,saleObj.receipt_no)
            current_balance = SaleAudit.paymal_search(sale_id)
          end
        end

        #orders print out
        # if type == "quick_service"
        booking = Booking.find_by_sale_id(sale_id)
        if booking.dining_facility_id.to_i>0
          table_id = booking.dining_facility_id
        else
          table_id = 0
        end

        latest_order = booking.booking_orders.order("order_id DESC").limit(1).first()
        if !latest_order.nil?
          latest_order_no = latest_order.order_id
        end

        booking.booking_orders.each do |order|
          # Order.pay_process_order_queue(order.order_id, table_id)
          oqs = OrderQueueStation.new
          oqs.pay_process_order_queue(order.order_id, table_id)

          assign_order = AssignedOrderItem.assigned_order_item_by_job(order.order_id)
          from = getCloudDomain #get sub domain in cloud mode
          ActionCable.server.broadcast "order_queue_station_channel",order: assign_order,from:from
        end

        # end

        #for card sale data
        card_data = Array.new
        # card_sale_trans_ref_no = Sale.getCardSaleTrans(sale_id)
        # if !card_sale_trans_ref_no.nil?
        #   card_sale_trans_ref_no.each do |cash_sale_trans|
        #     card_res_date = cash_sale_trans.res_date.strftime("%Y-%m-%d").to_s
        #     card_res_time = cash_sale_trans.res_time.strftime("%H:%M").to_s
        #     card_no = cash_sale_trans.pan.last(4)
        #     card_no = card_no.rjust(19,"**** **** **** ")
        #     card_data.push({'res_date' => card_res_date, 'res_time' => card_res_time, 'batch_no' => cash_sale_trans.batch_no, 'trace' => cash_sale_trans.trace, 'pan' => card_no, 'app' => cash_sale_trans.app, 'tid' => cash_sale_trans.terminal_id, 'app_code' => cash_sale_trans.app_code, 'ref_no' => cash_sale_trans.ref_no, 'mid' => cash_sale_trans.merchant_id})
        #   end
        # end

        #card_balance amount for Paymal payment
        card_balance_amount,transaction_ref = SaleAudit.getCardBalanceAmount(sale_id)

        # get printer info
        print_settings=PrintSetting.find_by_unique_code(unique_code)
        # Calculate Food and Beverage Total
        item_price_by_accounts = SaleItem.calculate_price_by_accounts(saleObj.sale_items)
        discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(saleObj.sale_items)
        other_amount = SaleItem.calculate_other_charges(sale_items)

        printer = Printer::ReceiptPrinter.new(print_settings)
        filename, sale_receipt_no, printer_name = printer.print_receipt_bill(print_settings, false, nil, cashier_terminal,sale_items,saleObj,account_no, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,current_shop, 'paid',current_balance,card_data,other_amount,latest_order_no,card_balance_amount,nil,transaction_ref)

        #end
      end
      logger.debug 'saleObj++++++++++++++++++++++++++'
      logger.debug saleObj.to_json
      if !saleObj.nil?
      # InventoryJob.perform_now(self.id)
        # InventoryDefinition.calculate_product_count(saleObj)
      end
    end

    # status, filename, sale_receipt_no, printer_name = Payment.pay(getCloudDomain, cash, sale_id, member_info, type, tax_type, path, latest_order_no, shop_detail, current_user, nil, nil)
    render json: JSON.generate({:status => saleObj.rebate_status, :message => "Can't Rebate coz of Sever Error ", :filename => filename, :receipt_no => sale_receipt_no, :printer_name => printer_name})
  end

  def show
    @cash_exist = PaymentMethodSetting.cash_exist
    @credit_exist = PaymentMethodSetting.credit_exist
    display_type = Lookup.find_by_lookup_type("display_type")
     if !display_type.nil? && display_type.value.to_i == 2
        @display_type = display_type.value
      else
        @display_type = nil
     end
    path = request.fullpath
    sale_id = params[:sale_id]
    @trans_flag = true
    if params[:type] == "transaction"
      @trans_flag = false
      @cashier_type   = "cashier"
    else
      @cashier_type   = params[:type]
    end

    if path.include? ("credit_payment")
      @sale_payment = SalePayment.get_credit_amount_due_left(sale_id)
    end

    @member_discount = MembershipSetting.find_by_discount(1)
    @membership_rebate_balance=0

    if Sale.exists?(sale_id)
      @cash = 0.0
      @kbz_pay_amount = 0.0
      @other = 0.0
      @ppamount = 0.0
      @visacount= 0.0
      @jcbcount= 0.0
      @mastercount = 0.0
      @unionpaycount = 0.0
      @alipaycount = 0.0
      @junctionpaycount = 0.0
      @credit = 0.0
      @paymalcount = 0.0
      @dingacount = 0.0
      @giftvouchercount = 0.0
      @sale_data = Sale.find_by_sale_id(sale_id)
      @balance = 0
      @accountable_type = ''
      @table_no = ''
      @dining  = ''
      @other_payment = 0.0
      @pdf_view = nil
      @lookup_pdf = Lookup.find_by_lookup_type("ReceiptPdfView")
      if !@lookup_pdf.nil?
        @pdf_view = @lookup_pdf.value
      end

      amount = SalePayment.get_kbz_pay_amount(sale_id, current_user)
      @kbz_pay_amount += amount.to_f

      #for changable on/off
      @changable_tax = true
      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'
              @changable_tax = false
            end
          end
        end
      end

      # @shop        =  shop_detail  #show shop info

      @customer_lists = Customer.where(name: ["WALK-IN", "TAKEAWAY"])
      saleObj = Sale.find(sale_id)

      #total customer with individual total amount
      @individual_total = Array.new
      if !saleObj.equal_persons.nil?
          per_person_amount = saleObj.grand_total.to_f / saleObj.equal_persons.to_i
          @individual_total.push({'total_customer' => saleObj.equal_persons.to_i, 'per_person_amount' => per_person_amount.to_f })
      end

      # rounding adjustment
      # if @shop.is_rounding_adj
      #   a = saleObj.grand_total % 25 # Modulus
      #   b = saleObj.grand_total / 25 # Division
      #   #not calculate rounding if modulus is 0 and division is even
      #   #calculate rounding if modulus is zero or not zero and division are not even
      #   if (a != 0.0 && b%2 != 0.0) || (a==0.0 && b%2 !=0)
      #     new_total    = Sale.get_rounding_adjustment(saleObj.grand_total)
      #     @rounding_adj = new_total-saleObj.grand_total
      #   else
      #     @rounding_adj = @sale_data.rounding_adjustment
      #   end
      # else
      #   @rounding_adj = @sale_data.rounding_adjustment
      # end
      #end rounding adjustment

      # rounding adjustment
      if current_shop.is_rounding_adj
        a = saleObj.grand_total % 25 # Modulus
        b = saleObj.grand_total / 25 # Division
        #not calculate rounding if modulus is 0 and division is even
        #calculate rounding if modulus is zero or not zero and division are not even
        if (a != 0.0 && b%2 != 0.0) || (a==0.0 && b%2 !=0)
          new_total    = Sale.get_rounding_adjustment(saleObj.grand_total)
          @rounding_adj = new_total-saleObj.grand_total
          saleObj.update_attributes(grand_total: new_total,old_grand_total: saleObj.grand_total,rounding_adjustment:@rounding_adj)
          @sale_data.grand_total = new_total
          @sale_data.old_grand_total = saleObj.grand_total
          @sale_data.rounding_adjustment = @rounding_adj
        else
          @rounding_adj = @sale_data.rounding_adjustment
        end
      else
        @rounding_adj = @sale_data.rounding_adjustment
      end
      #end rounding adjustment

      # get printer info
      @print_settings = PrintSetting.get_precision_delimiter()

      #get customer amount
      @customer = Customer.find(@sale_data.customer_id)
      # accounts = @customer.tax_profiles
      accounts = TaxProfile.where("group_type = ?",@cashier_type).order("order_by ASC")
      @account_arr =[]
      @tax_arr =[]
      accounts.each do |acc|
        account = TaxProfile.find(acc.id)
        # @account_arr.push(account)
        @tax_arr.push(account.name)
      end
      sale_taxes = SaleTax.where("sale_id = ?", saleObj.sale_id)
      if !sale_taxes.empty?
        sale_taxes.each do |sale_tax|
          @account_arr.push(sale_tax)
        end
      end
      rebate = MembershipSetting.find_by_rebate(1)
      # get member information
      if @customer.membership_id != nil && rebate
        response = Customer.get_member_account(@customer)
        if response["status"]==true
         response["account_data"].each do |res|
          if res["accountable_type"] == "RebateAccount" || res["accountable_type"] == "RebatebonusAccount"
             @balance = @balance.to_f + res["balance"].to_f
            #  @accountable_type = res["accountable_type"]
             @accountable_type = "Rebate Balance"
          end
        end
        end
      end

      #end customer amount

      #paymal payment

      @sale_data.bookings.each do |sbk|
        if sbk.dining_facility_id.to_i >0
          df = DiningFacility.find(sbk.dining_facility_id)
          @table_no = df.type + ' ' + df.name
          @checkin_time = sbk.checkin_at
          @dining = df
          break
        else
          @table_no = nil
          @checkin_time = nil
          @dining = nil
        end
      end

      if path.include? ("credit_payment")
        @sale_payment_data = SalePayment.get_sale_payment_for_credit(@sale_data)
      else
        @sale_payment_data = SalePayment.get_sale_payments(@sale_data)
      end
      @sale_payment_data.each do |spay|
        if spay.payment_method == "cash"
         @cash += spay.payment_amount
        end
        if spay.payment_method !="creditnote"
          @other_payment += spay.payment_amount
        end

        if spay.payment_method == "mpu"
          @other += spay.payment_amount
        elsif spay.payment_method == "paypar"
          @ppamount += spay.payment_amount
        elsif spay.payment_method == "visa"
          @visacount += spay.payment_amount
        elsif spay.payment_method == "jcb"
          @jcbcount += spay.payment_amount
        elsif spay.payment_method == "master"
          @mastercount += spay.payment_amount
        elsif spay.payment_method == "unionpay"
          @unionpaycount += spay.payment_amount
        elsif spay.payment_method == "JunctionPay"
          @junctionpaycount += spay.payment_amount
        elsif spay.payment_method == "creditnote"
          @credit += spay.payment_amount
        elsif spay.payment_method == "paymal"
          @paymalcount += spay.payment_amount
        elsif spay.payment_method == "alipay"
          @alipaycount += spay.payment_amount
        elsif spay.payment_method == "dinga"
          @dingacount += spay.payment_amount
        elsif spay.payment_method == "giftvoucher"
          @giftvouchercount += spay.payment_amount
        end

      end
    end
  end

  def reprint
    sale_id = params[:sale_id]
    member_info = nil
    latest_order_no = nil
    saleObj = Sale.find(sale_id)

    # For Cashier by Zone
    bookings = Booking.where("sale_id='#{sale_id}'")

    booking = Booking.find_by_sale_id(sale_id)
    latest_order = booking.booking_orders.joins(" JOIN orders ON orders.order_id = booking_orders.order_id").where("orders.source = 'quick_service'").order("order_id DESC").limit(1).first()
    if !latest_order.nil?
      latest_order_no = latest_order.order_id
    end
    # if bookings.count > 1
    #   # for Multiple Booking
    #   table = DiningFacility.find(bookings[0].dining_facility_id)
    # else
    #   table = DiningFacility.find(bookings[0].dining_facility_id)
    # end
    shift = ShiftSale.current_open_shift(current_user)
    if !shift.nil?
      cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id)
    else
      if bookings[0].dining_facility_id.to_i > 0
        table = DiningFacility.find(bookings[0].dining_facility_id)
        cashier_zone = CashierTerminalByZone.find_by_zone_id(table.zone_id)
        cashier_terminal = CashierTerminal.find(cashier_zone.cashier_terminal_id)
      else
          shift = ShiftSale.find(saleObj.shift_sale_id)
          cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id)
      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
      unique_code = "ReceiptBillPdf"
      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 = "ReceiptBillPdf"
            end
          end
        end
      end
      customer= Customer.find(saleObj.customer_id)

      #shop detail
      #shop_detail =  Shop.first
      # get member information
      rebate = MembershipSetting.find_by_rebate(1)
      if customer.membership_id != nil && rebate
        member_info = Customer.get_member_account(customer)
        rebate_amount  = Customer.get_membership_transactions(customer,saleObj.receipt_no)
        current_balance = SaleAudit.paymal_search(sale_id)
      end

      #for card sale data
      card_data = Array.new
      card_sale_trans_ref_no = Sale.getCardSaleTrans(sale_id)
      if !card_sale_trans_ref_no.nil?
        card_sale_trans_ref_no.each do |cash_sale_trans|
          card_res_date = cash_sale_trans.res_date.strftime("%Y-%m-%d").to_s
          card_res_time = cash_sale_trans.res_time.strftime("%H:%M").to_s
          card_no = cash_sale_trans.pan.last(4)
          card_no = card_no.rjust(19,"**** **** **** ")
          card_data.push({'res_date' => card_res_date, 'res_time' => card_res_time, 'batch_no' => cash_sale_trans.batch_no, 'trace' => cash_sale_trans.trace, 'pan' => card_no, 'app' => cash_sale_trans.app, 'tid' => cash_sale_trans.terminal_id, 'app_code' => cash_sale_trans.app_code, 'ref_no' => cash_sale_trans.ref_no, 'mid' => cash_sale_trans.merchant_id})
        end
      end

      #card_balance amount for Paymal payment
      card_balance_amount,transaction_ref= SaleAudit.getCardBalanceAmount(sale_id)

      # get printer info
      print_settings=PrintSetting.find_by_unique_code(unique_code)

      # Calculate price_by_accounts
      item_price_by_accounts = SaleItem.calculate_price_by_accounts(saleObj.sale_items)
      discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(saleObj.sale_items)
      other_amount = SaleItem.calculate_other_charges(saleObj.sale_items)

      printer = Printer::ReceiptPrinter.new(print_settings)

      filename, receipt_no, cashier_printer = printer.print_receipt_bill(print_settings, false, nil, cashier_terminal,saleObj.sale_items,saleObj,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,current_shop, "Re-print",current_balance,card_data,other_amount,latest_order_no,card_balance_amount,nil,transaction_ref)

      result = {
        :status => true,
        :filepath => filename,
        :printer_model => print_settings.brand_name,
        :printer_url => print_settings.api_settings
      }

      # Mobile Print
      render :json => result.to_json
    # end
  end

  def foc
    cash          = params[:cash]
    sale_id       = params[:sale_id]
    sub_total       = params[:sub_total]
    remark       = params[:remark]
    member_info   = nil
    rebate_amount = nil
    current_balance = nil
    order_source = params[:type]

    if(Sale.exists?(sale_id))
      saleObj      = Sale.find(sale_id)
      #calculate cash acmount
      cash = saleObj.total_amount

      if saleObj.discount_type == "member_discount"
        saleObj.update_attributes(grand_total: 0, rounding_adjustment: 0, amount_received: 0, amount_changed: 0)
        saleObj.compute_by_sale_items(0, nil, order_source)
      end

      saleObj.update_attributes(grand_total: 0, rounding_adjustment: 0, amount_received: 0, amount_changed: 0)

      sale_payment = SalePayment.new
      sale_payment.process_payment(saleObj, current_user, cash, "foc" ,remark)

      bookings = Booking.where("sale_id='#{sale_id}'")
      if bookings[0].dining_facility_id.to_i > 0
        table = DiningFacility.find(bookings[0].dining_facility_id)
        type  = 'payment'
        from = getCloudDomain #get sub domain in cloud mode
        ActionCable.server.broadcast "order_channel",table: table,type:type,from:from
      end



      # For Cashier by Zone
      bookings = Booking.where("sale_id='#{sale_id}'")

      shift = ShiftSale.current_open_shift(current_user)
      if !shift.nil?
        cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id)
      else
        if bookings[0].dining_facility_id.to_i > 0
          table = DiningFacility.find(bookings[0].dining_facility_id)
          cashier_zone = CashierTerminalByZone.find_by_zone_id(table.zone_id)
          cashier_terminal = CashierTerminal.find(cashier_zone.cashier_terminal_id)
        else
          shift = ShiftSale.find(saleObj.shift_sale_id)
          cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id)
        end
      end

      # Re-call Sale Data
      saleObj      = Sale.find(sale_id)

      # if ENV["SERVER_MODE"] != "cloud" #no print in cloud server
        # unique_code = "ReceiptBillPdf"
        customer= Customer.find(saleObj.customer_id)

         #shop detail
        #shop_detail =  Shop.first
        printer = PrintSetting.all

        unique_code="ReceiptBillPdf"
        if !printer.empty?
          printer.each do |printer_setting|
            if printer_setting.unique_code == 'ReceiptBillPdf'
              unique_code="ReceiptBillPdf"
            elsif printer_setting.unique_code == 'ReceiptBillA5Pdf'
              unique_code="ReceiptBillA5Pdf"
            elsif printer_setting.unique_code == 'ReceiptBillStarPdf'
              unique_code="ReceiptBillStarPdf"
            end
          end
        end
        # get printer info
        print_settings=PrintSetting.find_by_unique_code(unique_code)
        # Calculate Food and Beverage Total
        item_price_by_accounts = SaleItem.calculate_price_by_accounts(saleObj.sale_items)
        discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(saleObj.sale_items)

        other_amount = SaleItem.calculate_other_charges(saleObj.sale_items)

        printer = Printer::ReceiptPrinter.new(print_settings)

        filename, sale_receipt_no, printer_name = printer.print_receipt_bill(print_settings, false, nil, cashier_terminal,saleObj.sale_items,saleObj,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,current_shop, "FOC",nil,nil,other_amount,nil,nil,nil,nil)
        result = {
              :status => true,
              :filepath => filename,
              :printer_model => print_settings.brand_name,
              :printer_url => print_settings.api_settings
            }

            # Mobile Print
        render :json => result.to_json

        if params[:type] == "quick_service"
          booking = Booking.find_by_sale_id(sale_id)
          if booking.dining_facility_id.to_i>0
            table_id = booking.dining_facility_id
          else
            table_id = 0
          end

          booking.booking_orders.each do |order|
            Order.pay_process_order_queue(order.order_id,table_id)
          end
        end
      # end
      if !saleObj.nil?
        #InventoryJob.perform_now(self.id)
        # InventoryDefinition.calculate_product_count(saleObj)
      end
    end
  end

  def rounding_adj

      saleObj      = Sale.find(params[:sale_id])

      if current_shop.is_rounding_adj
        a = saleObj.grand_total % 25 # Modulus
        b = saleObj.grand_total / 25 # Division
        #not calculate rounding if modulus is 0 and division is even
        #calculate rounding if modulus is zero or not zero and division are not even
        if (a != 0.0 && b%2 != 0.0) || (a==0.0 && b%2 !=0)
          new_total    = Sale.get_rounding_adjustment(saleObj.grand_total)
          rounding_adj = new_total-saleObj.grand_total
          saleObj.update_attributes(grand_total: new_total,old_grand_total: saleObj.grand_total,rounding_adjustment:rounding_adj)
        end
      end
  end

  #print function for receipt
  def print
    filename      = params[:filename]
    receipt_no    = params[:receipt_no]
    printer_name  = params[:printer_name]
    cashier_type  = params[:type]

    if cashier_type.strip.downcase == "doemal_order"
      unique_code = "ReceiptBillOrderPdf"
    else
      receipt_bill_a5_pdf = Lookup.collection_of("print_settings") #print_settings with name:ReceiptBillA5Pdf
      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
      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 = "ReceiptBillPdf"
            end
          end
        end
      end
    end
    # get printer info
    print_settings=PrintSetting.find_by_unique_code(unique_code)
    printer = Printer::ReceiptPrinter.new(print_settings)
    printer.print_receipt_pdf(filename,receipt_no,print_settings.print_copies,printer_name)

    result = {
          :status => true,
          :filepath => filename,
          :printer_model => print_settings.brand_name,
          :printer_url => print_settings.api_settings
        }
    Rails.logger.debug "$$$$$$$$$ result ::"
    Rails.logger.debug result
        # Mobile Print
    render :json => result.to_json
    # render :json => {status: true}
  end

  #changable tax for sale
  def change_tax
    sale_id       = params[:sale_id]
    order_source  = params[:cashier_type]
    tax_type      = params[:tax_type]
    remark = "Change tax to #{tax_type.upcase} for Sale ID #{sale_id} by #{current_login_employee.name}"
    sale = Sale.find(sale_id)
    sale.compute_by_sale_items(sale.total_discount, nil, order_source, tax_type)
    SaleAudit.record_audit_change_tax(sale_id, remark, current_login_employee.name)
    render json: JSON.generate({:status => true})
  end

  #get cloud domain
  def getCloudDomain
    from = ""
    if ENV["SERVER_MODE"] == 'cloud'
      from = request.subdomain.to_s  + "." + request.domain.to_s
    end

    return from
  end
end
