ultimatepos/Modules/Maintenance/Services/EquipmentAssetSyncService.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]));
}
}
}
}