shift_event_id; $service = alexr_get_service($service_id); return $service; } public function getPaymentRuleAttribute() { $service = $this->service; if ($service){ return $service->getPaymentRule($this); } return null; } public function getPaymentStatusAttribute() { // Manual offer/payment setup (BookingsController@offerPaymentSetup): the // operator explicitly chose the status to land on after completion. It is // authoritative over the shift's payment/offer rules. $settings = $this->settings; if (is_array($settings) && !empty($settings['final_status'])) { return $settings['final_status']; } $paymentRule = $this->paymentRule; if ($paymentRule && is_array($paymentRule) && isset($paymentRule['status'])){ return $paymentRule['status']; } return BookingStatus::BOOKED; } // Get last payment public function getPaymentAttribute() { return Payment::where('booking_id', $this->id)->last(); } // Solo devuelve el pago succeed public function getPaymentSuccessAttribute() { $payment = $this->payments->filter( function($item){ return $item->status == PaymentStatus::SUCCEEDED || $item->status == PaymentStatus::SUCCEEDED_CAPTURE; } )->first(); if ($payment) return $payment; return null; } public function getPaidAmountAttribute() { $payment = $this->payment; if (!$payment) return 0; return intval($payment->amount) / 100.0; } public function getPaidAmountFormattedAttribute() { $payment = $this->payment; if (!$payment) return ''; if ($payment->payment_type == 'xendit' || $payment->payment_type == 'upayments') { $amount = intval($payment->amount) / 100.0; } else { $amount = intval($payment->amount) / 100.0; } return CurrencyType::symbolFor($payment->currency).$amount; } public function getPaymentReceiptLinkAttribute() { $payment = $this->payment; if (!$payment) return ''; if (!$payment->payment_type) return null; if ($payment->payment_type == 'stripe') { return $this->getStripeReceiptLinkAttribute(); } return null; } public function getIsPaidAttribute() { $payment = $this->payment; if (!$payment) return false; return $payment->status == PaymentStatus::SUCCEEDED; } public function getIsCardCapturedAttribute() { $payment = $this->payment; if (!$payment) return false; return $payment->status == PaymentStatus::SUCCEEDED_CAPTURE; } public function getIsForCapturingCardAttribute() { $payment = $this->payment; if (!$payment) return false; return in_array($payment->status, [ PaymentStatus::PENDING_CAPTURE, PaymentStatus::SUCCEEDED_CAPTURE, PaymentStatus::CANCELLED_CAPTURE, PaymentStatus::PENDING_PREAUTH, PaymentStatus::SUCCEEDED_PREAUTH, PaymentStatus::CANCELLED_PREAUTH, ]); } public function getIsPreauthConfirmedAttribute() { $payment = $this->payment; if (!$payment) return false; return in_array($payment->status, [ PaymentStatus::SUCCEEDED_PREAUTH, ]); } public function getStripeReceiptLinkAttribute() { $payment = $this->payment; if (!$payment) return null; if (!class_exists('\Alexr\Payments\GatewayStripe')){ return null; } $stripe_payment_intent_id = $payment->stripe_payment_intent_id; if (GatewayStripe::isCardOnFileIntent($stripe_payment_intent_id)) { return null; } $stripe = new \Alexr\Payments\GatewayStripe($this->restaurant_id); $result = $stripe->getPaymentIntent($stripe_payment_intent_id); try { if (isset($result->latest_charge) && $result->latest_charge){ $charge_id = $result->latest_charge; // Obtener el cliente de Stripe para hacer la llamada directa $client = $stripe->getClient(); $charge = $client->charges->retrieve($charge_id); if (isset($charge->receipt_url)) { return $charge->receipt_url; } } } catch (Exception $e) { return null; } return null; } // Card capture to pay later. NO LO USO es old Stripe //---------------------------------------------- // Get stripe token captured for card intent public function getStripeCardTokenAttribute() { try { $token = $this->get_setting('stripe_card_token'); if (is_string($token)) { return json_decode($token, true); } return $token; } catch (\Exception $e) { return null; } } // Get stripe token captured for card intent public function setStripeCardTokenAttribute($value) { $this->set_setting('stripe_card_token', $value); } }