Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Generate Voucher Sold

filepath = '/tmp/data4.xlsx'
date = Date.parse('29 June 2023')
tickets = Ticket.includes(:user, ticket_transaction: { restaurant: :translations },  ticket_group: :translations );
tickets = tickets.where('created_at >= ? AND created_at <= ?', date - 1.day, date + 1.day);


SECRET_KEY = Figaro.env.GB_PRIMEPAY_SECRET_KEY!
def api_client(secret_key = SECRET_KEY)
  @api_client ||= Faraday.new ::GB_PRIMEPAY_BASE_URL do |conn|
    conn.headers['Content-Type'] = 'application/json; charset=utf-8'
    conn.headers['Authorization'] = "Basic #{Base64.strict_encode64("#{secret_key}:")}"

    conn.response :logger

    conn.adapter Faraday.default_adapter
  end
end


Xlsxtream::Workbook.open(filepath) do |xlsx|
  xlsx.write_worksheet 'Voucher Report' do |sheet|
    header = [
      'Transaction ID', 'Voucher Purchase Date', 'Customer Name', 'Voucher Package Name',
      'Total Voucher Value', 'Partner Name', 'Payment Status', 

      'Voucher Active Status',
      'Quota',

      'GB Pay - ignore', 'Payment Type', 'Payment Gateway', 'Paid at Date', 'Paid Time',


      'phone',
      'email',
      'loyalty level'
    ]

    sheet.add_row header
    ticket_transaction_charges = {}
    tickets.find_each do |r|
      customer_name = r.user.present? ? r.user.name : r.guest.name
      partner_name = r.ticket_transaction.restaurant&.name_en

      charges = r.ticket_transaction.charges.success_scope
      transaction_ids = charges.present? ? (charges.map(&:transaction_id)&.uniq&.to_sentence&.presence || '') : ''

      payment_type_provider = r.ticket_transaction.payment_type_provider

      row_data = [
        r.ticket_transaction_id,
        r.created_at.in_time_zone('Asia/Bangkok'),
        customer_name,
        r.ticket_group.name_en,
        r.amount.amount,
        partner_name,
        r.ticket_transaction.status_property['status'],

        r.active ? 'Active' : 'Not Active',
        r.ticket_group.quantity,

        transaction_ids,
        payment_type_provider ? payment_type_provider.to_s.split('_').join(' ').titleize : '',
        'Hungry Hub',
        r.created_at.in_time_zone('Asia/Bangkok').strftime('%d/%m/%Y'),
        r.created_at.in_time_zone('Asia/Bangkok').strftime('%H:%M:%S'),

        r.user&.phone_v2_full,
        r.user&.email,
        r.user&.user_loyalty&.state
      ]

      sheet.add_row(row_data)
    end
  end
end