| 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!');
 
-     }
 
- }
 
 
  |