Class: Workers::Payments::CheckPaymentWorker
- Inherits:
-
ApplicationWorker
- Object
- ApplicationWorker
- Workers::Payments::CheckPaymentWorker
- Defined in:
- app/workers/workers/payments/check_payment_worker.rb
Overview
kadang2 ada kasus dimana user mencet tombol cancel tp pembayarannya tetep lanjut, jadi kita perlu balikin status reservation nya jadi pending_arrival
Instance Method Summary collapse
Methods inherited from ApplicationWorker
Instance Method Details
#perform(transaction_type, transaction_id) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'app/workers/workers/payments/check_payment_worker.rb', line 9 def perform(transaction_type, transaction_id) transaction = transaction_type.to_s.camelize.constantize.find_by(id: transaction_id) return if transaction.blank? return unless transaction.cancelled? && transaction.paid_charges.present? latest_pending_charge = transaction.pending_charges.where(status: 'pending').order(created_at: :desc).first return if latest_pending_charge.blank? check_status = GbPrimepay::CheckStatus.new check_status.check(latest_pending_charge.omise_charge_id) data = check_status.data if check_status.success? && data.present? success_payment = if data.is_a?(Array) data.select { |txn| txn['status'] == 'S' || txn['status'] == 'A' }.first elsif data['status'] == 'S' || data['status'] == 'A' data end return if success_payment.blank? charge_id = success_payment['gbpReferenceNo'] service = PaymentProcessService::MarkAsPaid.new(charge_id, charge_id) unless service.execute! HH_LOGGER.error(service., { id: transaction.id, transaction: charge_id, transaction_type: 'TicketTransaction', }) raise end case transaction_type.to_sym when :ticket_transaction transaction.ticket_bundles.includes(:ticket_group).each do |ticket_bundle| ticket_group = ticket_bundle.ticket_group if ticket_group.oversold? # case when create booking quota still available and then payment cancelled (quota restored) # but system check payment success and quota not available anymore HH_LOGGER.error('System re-mark as paid but the VIM quantity is not available anymore', ticket_group: ticket_group.attributes, transaction: transaction.attributes) end end else raise NotImplementedError end transaction.audit_comment = 'activate again booking because paid' if transaction.respond_to?(:mark_as_valid_reservation!) transaction.mark_as_valid_reservation! else transaction.active = true transaction.for_locking_system = false end transaction.save! end end |