class Origami::PaymentsController < BaseOrigamiController
  authorize_resource :class => false
  def index
  end

  def first_bill
    sale_id = params[:sale_id] # sale_id
    sale_data = Sale.find(sale_id)
    sale_items = SaleItem.get_all_sale_items(sale_id)
    member_info = nil

    # For Cashier by Zone
    booking = sale_data.booking

    if current_user.role == 'cashier'
      cashier_terminal = current_user.cashier_terminal
    elsif booking.dining_facility
      cashier_terminal = booking.cashier_terminal_by_dining_facility
    end

    cashier_terminal ||= sale_data.cashier_terminal_by_shift_sale

    customer = sale_data.customer

    #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, gateway_communication_type: ['api', 'Api'], is_active: true)
                                          .where.not(gateway_url: [nil, ''], auth_token: [nil, ''], merchant_account_id: [nil, '']).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, nil, current_shop, "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
    # end
  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]


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

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


      rebate_amount = nil

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

      if current_user.role == 'cashier'
        cashier_terminal = current_user.cashier_terminal
      elsif booking.dining_facility
        cashier_terminal = booking.cashier_terminal_by_dining_facility
      end

      cashier_terminal ||= saleObj.cashier_terminal_by_shift_sale

      if booking.dining_facility
        ActionCable.server.broadcast(
          "order_channel",
          table: booking.dining_facility,
          type: 'payment',
          from: getCloudDomain
        )
      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"
        if booking.dining_facility_id.present?
          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 = SaleAudit.getCardBalanceAmount(sale_id)

      # get printer info
      if type.strip.downcase == 'doemal_order'
        print_settings = PrintSetting.where(unique_code: 'ReceiptBillOrderPdf').first
      else
        print_settings = PrintSetting.where("unique_code REGEXP ?", "receipt.*bill.*pdf").first
      end
      # 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)
      credit_pdf = Lookup.find_by_lookup_type("credit_pdf")

      if (path.include? ("credit_payment")) &&  !credit_pdf.nil? && credit_pdf.value.to_i == 1
        printed_status = 'credit_payment'
      else
        printed_status = 'Paid'
      end

      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,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,Shop.current_shop, printed_status,current_balance,card_data,other_amount,latest_order_no,card_balance_amount,nil)
      # 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 kbz_query
  #   sale_id = params[:sale_id]
  #   table_id = params[:table_id]
  #   sp = SalePayment.where('sale_id=?', sale_id).last
  #   status, table_id = KbzPay.query(sp.sale_payment_id)
  #   render json: JSON.generate({:status => status, :table_id => table_id, :message => @message})
  # end

  def show
    @sale = Sale.find(params[:sale_id])
    @shop = Shop.current_shop
    @customer = @sale.customer
    @customer_lists = Customer.where(name: ["WALK-IN", "TAKEAWAY"])
    @member_discount = MembershipSetting.find_by_discount(1)

    if dining_facility = @sale.booking.dining_facility
      @table_no = dining_facility.type + ' ' + dining_facility.name
      @checkin_time = @sale.booking.checkin_at
      @dining = dining_facility
    end

    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

    @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 = false
      @amount_due = @sale.sale_payments.where(payment_method: 'creditnote').pluck('SUM(payment_amount)').first
      payments = @sale.sale_payments.joins(:sale_audit).group_by(&:payment_method).map { |method, payments| [method == 'paypar' ? 'redeem' : method, payments.sum { |payment| payment.payment_amount }] }
    else
      @sale_payment = true
      @amount_due = @sale.grand_total
      payments = @sale.sale_payments.left_joins(:sale_audit).where(sale_audits: {sale_audit_id: nil}).group_by(&:payment_method).map { |method, payments| [method == 'paypar' ? 'redeem' : method, payments.sum { |payment| payment.payment_amount }] }
    end

    @payment_methods = PaymentMethodSetting.where(is_active: true).pluck(:payment_method)
    @cash = payments.inject(0) { |sum, payment| sum + payment[1] if payment[0] == 'cash' }
    @credit = payments.inject(0) { |sum, payment| payment[0] == 'creditnote' ? sum + payment[1] : sum }
    @other_payments = payments.select { |payment| !['cash', 'creditnote', 'foc'].include? payment[0] }.map { |method, amount| [ @payment_methods.find { |payment_method| payment_method.parameterize == method }, amount ] }
    @other_payment = @other_payments.sum { |payment| payment[1] }

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

    #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

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

    @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

    # 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
    #     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

    # 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 = @sale.sale_taxes
    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
    @balance = 0
    @accountable_type = ''
    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
  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.current_shop
      # 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 = 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)

      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

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

      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)

      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.current_shop
        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)
        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])
      @shop        = current_shop

      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
          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"
      print_settings = PrintSetting.where(unique_code: 'ReceiptBillOrderPdf').first
    else
      print_settings = PrintSetting.where("unique_code REGEXP ?", "receipt.*bill.*pdf").first
    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
