Feat: Shipping functionalities redesign, elta courier integration, commenting out acs since no integration can happen, flow updates

This commit is contained in:
2026-09-30 17:28:47 +03:00
parent f411dec1da
commit 49ec4333af
63 changed files with 3143 additions and 347 deletions
@@ -0,0 +1,48 @@
<?php
namespace Modules\Core\Shipping\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Core\Shipping\Contracts\CarrierFulfillmentInterface;
use Modules\Core\Shipping\Contracts\SupportsBatchLabels;
use Modules\Core\Shipping\Models\Shipment;
/**
* The Pending Vouchers screen's "Print selected": several shipments' labels
* as one PDF. Same signed-URL auth as DownloadShipmentLabelController —
* the ids are part of the signed query string, so they can't be changed.
* All shipments must be one carrier's (the screen's tabs are per carrier)
* and that carrier must implement SupportsBatchLabels.
*/
class DownloadShipmentLabelsController extends Controller
{
public function __invoke(Request $request)
{
if (! $request->hasValidSignature()) {
abort(401);
}
$ids = array_filter(array_map('intval', explode(',', (string) $request->query('ids'))));
$shipments = Shipment::whereIn('id', $ids)->orderBy('id')->get()
->filter(fn (Shipment $shipment) => $shipment->hasCarrierLabel());
$carriers = $shipments->pluck('carrier')->unique();
if ($shipments->isEmpty() || $carriers->count() !== 1) {
abort(404);
}
$service = app(CarrierFulfillmentInterface::class, ['carrier' => $carriers->first()]);
if (! $service instanceof SupportsBatchLabels) {
abort(404);
}
return response($service->printLabels($shipments), 200, [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline; filename="labels-'.now()->format('Ymd-His').'.pdf"',
]);
}
}