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