123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- <?php
- namespace App\Http\Controllers\Front\Payments;
- use App\Http\Controllers\Controller;
- use App\Shop\Carts\Repositories\Interfaces\CartRepositoryInterface;
- use App\Shop\Checkout\CheckoutRepository;
- use App\Shop\Orders\Repositories\OrderRepository;
- use App\Shop\OrderStatuses\OrderStatus;
- use App\Shop\OrderStatuses\Repositories\OrderStatusRepository;
- use App\Shop\Shipping\ShippingInterface;
- use Gloudemans\Shoppingcart\Facades\Cart;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Log;
- use Ramsey\Uuid\Uuid;
- use Shippo_Shipment;
- use Shippo_Transaction;
- class BankTransferController extends Controller
- {
- /**
- * @var CartRepositoryInterface
- */
- private $cartRepo;
- /**
- * @var int $shipping
- */
- private $shippingFee;
- private $rateObjectId;
- private $shipmentObjId;
- private $billingAddress;
- private $carrier;
- /**
- * BankTransferController constructor.
- *
- * @param Request $request
- * @param CartRepositoryInterface $cartRepository
- * @param ShippingInterface $shippingRepo
- */
- public function __construct(
- Request $request,
- CartRepositoryInterface $cartRepository,
- ShippingInterface $shippingRepo
- )
- {
- $this->cartRepo = $cartRepository;
- $fee = 0;
- $rateObjId = null;
- $shipmentObjId = null;
- $billingAddress = $request->input('billing_address');
- if ($request->has('rate')) {
- if ($request->input('rate') != '') {
- $rate_id = $request->input('rate');
- $rates = $shippingRepo->getRates($request->input('shipment_obj_id'));
- $rate = collect($rates->results)->filter(function ($rate) use ($rate_id) {
- return $rate->object_id == $rate_id;
- })->first();
- $fee = $rate->amount;
- $rateObjId = $rate->object_id;
- $shipmentObjId = $request->input('shipment_obj_id');
- $this->carrier = $rate;
- }
- }
- $this->shippingFee = $fee;
- $this->rateObjectId = $rateObjId;
- $this->shipmentObjId = $shipmentObjId;
- $this->billingAddress = $billingAddress;
- }
- /**
- * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
- */
- public function index()
- {
- return view('front.bank-transfer-redirect', [
- 'subtotal' => $this->cartRepo->getSubTotal(),
- 'shipping' => $this->shippingFee,
- 'tax' => $this->cartRepo->getTax(),
- 'total' => $this->cartRepo->getTotal(2, $this->shippingFee),
- 'rateObjectId' => $this->rateObjectId,
- 'shipmentObjId' => $this->shipmentObjId,
- 'billingAddress' => $this->billingAddress
- ]);
- }
- /**
- * @param Request $request
- *
- * @return \Illuminate\Http\RedirectResponse
- * @throws \Exception
- */
- public function store(Request $request)
- {
- $checkoutRepo = new CheckoutRepository;
- $orderStatusRepo = new OrderStatusRepository(new OrderStatus);
- $os = $orderStatusRepo->findByName('ordered');
- $order = $checkoutRepo->buildCheckoutItems([
- 'reference' => Uuid::uuid4()->toString(),
- 'courier_id' => 1, // @deprecated
- 'customer_id' => $request->user()->id,
- 'address_id' => $request->input('billing_address'),
- 'order_status_id' => $os->id,
- 'payment' => strtolower(config('bank-transfer.name')),
- 'discounts' => 0,
- 'total_products' => $this->cartRepo->getSubTotal(),
- 'total' => $this->cartRepo->getTotal(2, $this->shippingFee),
- 'total_shipping' => $this->shippingFee,
- 'total_paid' => 0,
- 'tax' => $this->cartRepo->getTax()
- ]);
- if (env('ACTIVATE_SHIPPING') == 1) {
- $shipment = Shippo_Shipment::retrieve($this->shipmentObjId);
- $details = [
- 'shipment' => [
- 'address_to' => json_decode($shipment->address_to, true),
- 'address_from' => json_decode($shipment->address_from, true),
- 'parcels' => [json_decode($shipment->parcels[0], true)]
- ],
- 'carrier_account' => $this->carrier->carrier_account,
- 'servicelevel_token' => $this->carrier->servicelevel->token
- ];
- $transaction = Shippo_Transaction::create($details);
- if ($transaction['status'] != 'SUCCESS'){
- Log::error($transaction['messages']);
- return redirect()->route('checkout.index')->with('error', 'There is an error in the shipment details. Check logs.');
- }
- $orderRepo = new OrderRepository($order);
- $orderRepo->updateOrder([
- 'courier' => $this->carrier->provider,
- 'label_url' => $transaction['label_url'],
- 'tracking_number' => $transaction['tracking_number']
- ]);
- }
- Cart::destroy();
- return redirect()->route('accounts', ['tab' => 'orders'])->with('message', 'Order successful!');
- }
- }
|