feat(ui): add invoice download action to shipment view

Add a new 'download_invoice' action to the ViewShipment Filament page, allowing users to download invoices directly from the shipment details view.

refactor(shipping): remove redundant Persian comments from import classes
This commit is contained in:
Kazem Alghasi 2026-08-23 23:35:12 +03:30
parent ab591dc9f8
commit a973c7ed5c
2 changed files with 3 additions and 38 deletions

View File

@ -26,6 +26,7 @@ class ViewShipment extends ViewRecord
->color('warning')
->url(fn ($record) => route('shipments.pdf.awb', $record))
->openUrlInNewTab(),
Actions\Action::make('download_invoice')
->label('دانلود INVOICE')
->icon('heroicon-o-currency-dollar')

View File

@ -11,9 +11,6 @@ use Maatwebsite\Excel\Row;
class ShippingRatesImport implements WithMultipleSheets
{
/**
* تعریف شیت‌های مختلف فایل اکسل و کلاس‌های پردازش‌گر مربوطه
*/
public function sheets(): array
{
return [
@ -24,9 +21,6 @@ class ShippingRatesImport implements WithMultipleSheets
}
}
/**
* کلاس برای پردازش شیت‌های استاندارد نرخ‌ها (Export Rate و Import Rate)
*/
class RateSheetImport implements OnEachRow, WithStartRow
{
protected int $imported = 0;
@ -35,43 +29,33 @@ class RateSheetImport implements OnEachRow, WithStartRow
public function __construct(protected string $direction) {}
/**
* شروع خواندن از ردیف ۵ (۴ ردیف اول هدر هستند)
*/
public function startRow(): int
{
return 5;
}
/**
* پردازش هر ردیف از شیت
*/
public function onRow(Row $row)
{
$rowIndex = $row->getIndex();
$cells = $row->toArray();
// بررسی اعتبار ستون وزن (ستون اول)
if (empty($cells[0]) || !is_numeric($cells[0])) {
$this->skipped++;
return;
}
try {
// تشخیص نوع سرویس (Doc یا Parcel)
$type = $this->resolveType($rowIndex, $cells);
// استخراج و نرمال‌سازی قیمت‌های ۱۰ زون
$zones = [];
for ($i = 1; $i <= 10; $i++) {
$val = str_replace([',', ' '], '', (string) ($cells[$i] ?? 0));
$zones['zone_' . $i] = is_numeric($val) ? (float) $val : 0;
}
// ثبت یا به‌روزرسانی نرخ در دیتابیس
ShippingRate::updateOrCreate(
[
'direction' => $this->direction, // export یا import
'direction' => $this->direction,
'type' => $type->value,
'weight' => (float) $cells[0],
],
@ -85,9 +69,6 @@ class RateSheetImport implements OnEachRow, WithStartRow
}
}
/**
* دریافت آمار عملیات ایمپورت
*/
public function getStats(): array
{
return [
@ -97,9 +78,6 @@ class RateSheetImport implements OnEachRow, WithStartRow
];
}
/**
* تشخیص نوع سرویس بر اساس محتوای ردیف
*/
private function resolveType(int $rowIndex, array $cells): ShipmentType
{
$header = strtoupper((string) ($cells[3] ?? ''));
@ -112,14 +90,10 @@ class RateSheetImport implements OnEachRow, WithStartRow
return ShipmentType::Parcel;
}
// اگر نوع مشخص نبود، بر اساس شماره ردیف حدس می‌زنیم
return $rowIndex < 10 ? ShipmentType::DocNormal : ShipmentType::Parcel;
}
}
/**
* کلاس برای پردازش شیت ساده‌تر نرخ‌ها (DocEco)
*/
class SimpleRateSheetImport implements OnEachRow, WithStartRow
{
protected int $imported = 0;
@ -131,18 +105,11 @@ class SimpleRateSheetImport implements OnEachRow, WithStartRow
protected string $direction = 'export'
) {}
/**
* شروع خواندن از ردیف ۲ (۱ ردیف اول هدر است)
*/
public function startRow(): int
{
return 2;
}
/**
* پردازش هر ردیف از شیت
*/
public function onRow(Row $row)
{
$cells = $row->toArray();
@ -189,9 +156,6 @@ class SimpleRateSheetImport implements OnEachRow, WithStartRow
}
}
/**
* دریافت آمار عملیات ایمپورت
*/
public function getStats(): array
{
return [
@ -200,4 +164,4 @@ class SimpleRateSheetImport implements OnEachRow, WithStartRow
'errors' => $this->errors,
];
}
}
}