108 lines
3.9 KiB
PHP
108 lines
3.9 KiB
PHP
<?php
|
|
|
|
namespace Modules\Maintenance\Services;
|
|
|
|
use App\Utils\Util;
|
|
use Modules\Maintenance\Models\Equipment;
|
|
use Modules\Maintenance\Utils\MaintenanceUtil;
|
|
|
|
class EquipmentAssetSyncService
|
|
{
|
|
public function __construct(
|
|
protected MaintenanceUtil $maintenanceUtil,
|
|
protected Util $util
|
|
) {}
|
|
|
|
public function syncAssetForEquipment(Equipment $equipment, int $businessId, int $userId): ?int
|
|
{
|
|
if (! empty($equipment->fixed_asset_id)) {
|
|
return (int) $equipment->fixed_asset_id;
|
|
}
|
|
|
|
if (! class_exists(\Modules\AssetManagement\Entities\Asset::class)
|
|
|| ! $this->maintenanceUtil->isAssetManagementEnabled($businessId)) {
|
|
return null;
|
|
}
|
|
|
|
$settings = $this->maintenanceUtil->getMaintenanceSettings($businessId);
|
|
if (empty($settings['auto_create_asset'])) {
|
|
return null;
|
|
}
|
|
|
|
$assetCode = $equipment->code;
|
|
$exists = \Modules\AssetManagement\Entities\Asset::where('business_id', $businessId)
|
|
->where('asset_code', $assetCode)
|
|
->exists();
|
|
if ($exists) {
|
|
$assetCode = $assetCode.'-'.substr(uniqid(), -4);
|
|
}
|
|
|
|
$asset = \Modules\AssetManagement\Entities\Asset::create([
|
|
'business_id' => $businessId,
|
|
'asset_code' => $assetCode,
|
|
'name' => $equipment->name,
|
|
'quantity' => 1,
|
|
'model' => $equipment->model,
|
|
'serial_no' => $equipment->serial_number,
|
|
'category_id' => $settings['default_asset_category_id'] ?? null,
|
|
'project_id' => $equipment->project_id,
|
|
'purchase_date' => $equipment->installation_date,
|
|
'unit_price' => 0,
|
|
'is_allocatable' => 0,
|
|
'description' => 'ایجاد خودکار از تجهیز CMMS: '.$equipment->code,
|
|
'created_by' => $userId,
|
|
'purchase_type' => 'owned',
|
|
]);
|
|
|
|
if ($equipment->warranty_expires_at
|
|
&& class_exists(\Modules\AssetManagement\Entities\AssetWarranty::class)
|
|
&& $equipment->installation_date) {
|
|
\Modules\AssetManagement\Entities\AssetWarranty::create([
|
|
'asset_id' => $asset->id,
|
|
'start_date' => $equipment->installation_date,
|
|
'end_date' => $equipment->warranty_expires_at,
|
|
'additional_note' => 'گارانتی همگامشده از CMMS',
|
|
]);
|
|
}
|
|
|
|
return (int) $asset->id;
|
|
}
|
|
|
|
public function updateLinkedAsset(Equipment $equipment): void
|
|
{
|
|
if (empty($equipment->fixed_asset_id)
|
|
|| ! class_exists(\Modules\AssetManagement\Entities\Asset::class)) {
|
|
return;
|
|
}
|
|
|
|
$asset = \Modules\AssetManagement\Entities\Asset::find($equipment->fixed_asset_id);
|
|
if (! $asset) {
|
|
return;
|
|
}
|
|
|
|
$asset->update([
|
|
'name' => $equipment->name,
|
|
'model' => $equipment->model,
|
|
'serial_no' => $equipment->serial_number,
|
|
'project_id' => $equipment->project_id,
|
|
'purchase_date' => $equipment->installation_date,
|
|
]);
|
|
|
|
if ($equipment->warranty_expires_at
|
|
&& $equipment->installation_date
|
|
&& class_exists(\Modules\AssetManagement\Entities\AssetWarranty::class)) {
|
|
$warranty = \Modules\AssetManagement\Entities\AssetWarranty::where('asset_id', $asset->id)->first();
|
|
$payload = [
|
|
'start_date' => $equipment->installation_date,
|
|
'end_date' => $equipment->warranty_expires_at,
|
|
'additional_note' => 'گارانتی همگامشده از CMMS',
|
|
];
|
|
if ($warranty) {
|
|
$warranty->update($payload);
|
|
} else {
|
|
\Modules\AssetManagement\Entities\AssetWarranty::create(array_merge($payload, ['asset_id' => $asset->id]));
|
|
}
|
|
}
|
|
}
|
|
}
|