Explorar el Código

Merge branch 'master' of http://host.webmagistri.biz:3000/parisio/easia into frontend

ferrari hace 4 meses
padre
commit
68834345bb
Se han modificado 34 ficheros con 1369 adiciones y 2 borrados
  1. 1 1
      app/Livewire/CompanyActivity.php
  2. 80 1
      app/Livewire/CompanyRate.php
  3. 69 0
      app/Livewire/CompanyService.php
  4. 88 0
      app/Livewire/Resource.php
  5. 129 0
      app/Livewire/ResourceContract.php
  6. 109 0
      app/Livewire/ResourceDocument.php
  7. 124 0
      app/Livewire/ResourceEquipment.php
  8. 118 0
      app/Livewire/ResourceRate.php
  9. 19 0
      app/Models/ContractType.php
  10. 19 0
      app/Models/EquipmentCategory.php
  11. 19 0
      app/Models/RateGroup.php
  12. 19 0
      app/Models/RateType.php
  13. 74 0
      app/Models/Resource.php
  14. 36 0
      app/Models/ResourceContract.php
  15. 27 0
      app/Models/ResourceDocument.php
  16. 35 0
      app/Models/ResourceEquipment.php
  17. 44 0
      app/Models/ResourceRate.php
  18. 0 0
      database/migrations/2025_08_08_161031_create_company_activities_table.php
  19. 0 0
      database/migrations/2025_08_08_161031_create_company_rates_table.php
  20. 31 0
      database/migrations/2025_09_05_100000_create_contract_types_table.php
  21. 31 0
      database/migrations/2025_09_05_100000_create_equipment_categories_table.php
  22. 31 0
      database/migrations/2025_09_05_100000_create_rate_groups_table.php
  23. 31 0
      database/migrations/2025_09_05_100000_create_rate_types_table.php
  24. 47 0
      database/migrations/2025_09_05_103000_create_resources_table.php
  25. 41 0
      database/migrations/2025_09_05_110000_create_resource_contracts_table.php
  26. 36 0
      database/migrations/2025_09_05_110000_create_resource_documents_table.php
  27. 40 0
      database/migrations/2025_09_05_110000_create_resource_equipments_table.php
  28. 40 0
      database/migrations/2025_09_05_110000_create_resource_rates_table.php
  29. 14 0
      resources/views/livewire/resource.blade.php
  30. 4 0
      resources/views/livewire/resource_contract.blade.php
  31. 4 0
      resources/views/livewire/resource_document.blade.php
  32. 4 0
      resources/views/livewire/resource_equipment.blade.php
  33. 4 0
      resources/views/livewire/resource_rate.blade.php
  34. 1 0
      routes/web.php

+ 1 - 1
app/Livewire/CompanyActivity.php

@@ -31,7 +31,7 @@ class CompanyActivity extends Component
 
     public function render()
     {
-        $this->company_activities = $this->company->activities;
+        $this->company_activities = $this->company->activities ?? [];
         return view('livewire.company_activity');
     }
 

+ 80 - 1
app/Livewire/CompanyRate.php

@@ -12,12 +12,91 @@ class CompanyRate extends Component
 
     public $company;
 
+    public $current_company_rate = null;
+
+    public $company_rates = [];
+
     #[Validate('required')] 
-    public $name = '';
+    public $amount = '';
+    public $type = '';
+    public $group = '';
+    public $description = '';
+    public $enabled = 1;
+
+    public $is_edit = false;
+
+    public function resetFields(){
+        $this->amount = '';
+        $this->type = '';
+        $this->group = '';
+        $this->description = '';
+        $this->enabled = 1;
+    }
 
     public function render()
     {
+        $this->company_rates = $this->company->rates ?? [];
         return view('livewire.company_rate');
     }
 
+    public function add()
+    {
+        $this->resetFields();
+        $this->is_edit = true;
+        $this->current_company_rate = null;
+    }
+
+    public function edit($id)
+    {
+        $this->resetFields();
+        $this->is_edit = true;
+        $this->current_company_rate = \App\Models\CompanyRate::findOrFail($id);
+        $this->amount = $this->current_company_rate->amount;
+        $this->type = $this->current_company_rate->type;
+        $this->group = $this->current_company_rate->group;
+        $this->description = $this->current_company_rate->description;
+        $this->enabled = $this->current_company_rate->enabled == 1;
+    }
+
+    public function save()
+    {
+        $this->validate();
+        try 
+        {
+            if ($this->current_company_rate == null)
+            {
+                \App\Models\CompanyActivity::create([
+                    'company_id' => $this->company->id,
+                    'amount' => $this->amount,
+                    'type' => $this->type,
+                    'group' => $this->group,
+                    'description' => $this->description,
+                    'enabled' => $this->enabled
+                ]);
+            }
+            else
+            {
+                $this->current_company_rate->update([
+                    'amount' => $this->amount,
+                    'type' => $this->type,
+                    'group' => $this->group,
+                    'description' => $this->description,
+                    'enabled' => $this->enabled ? 1 : 0,
+                ]);
+            }
+            session()->flash('success','Dati salvati con successo');
+            $this->resetFields();
+            $this->is_edit = false;
+        } catch (\Exception $ex) {
+            session()->flash('error','Errore (' . $ex->getMessage() . ')');
+        }
+    }
+
+    public function cancel()
+    {
+        $this->resetFields();
+        $this->is_edit = false;
+        $this->current_company_rate = null;
+    }
+
 }

+ 69 - 0
app/Livewire/CompanyService.php

@@ -12,12 +12,81 @@ class CompanyService extends Component
 
     public $company;
 
+    public $current_company_service = null;
+
+    public $company_services = [];
+
     #[Validate('required')] 
     public $name = '';
+    public $description = '';
+    public $enabled = 1;
+
+    public $is_edit = false;
+
+    public function resetFields(){
+        $this->name = '';
+        $this->description = '';
+        $this->enabled = 1;
+    }
 
     public function render()
     {
+        $this->company_services = $this->company->services ?? [];
         return view('livewire.company_service');
     }
 
+    public function add()
+    {
+        $this->resetFields();
+        $this->is_edit = true;
+        $this->current_company_service = null;
+    }
+
+    public function edit($id)
+    {
+        $this->resetFields();
+        $this->is_edit = true;
+        $this->current_company_service = \App\Models\CompanyService::findOrFail($id);
+        $this->name = $this->current_company_service->name;
+        $this->description = $this->current_company_service->description;
+        $this->enabled = $this->current_company_service->enabled == 1;
+    }
+
+    public function save()
+    {
+        $this->validate();
+        try 
+        {
+            if ($this->current_company_service == null)
+            {
+                \App\Models\CompanyService::create([
+                    'company_id' => $this->company->id,
+                    'name' => $this->name,
+                    'description' => $this->description,
+                    'enabled' => $this->enabled
+                ]);
+            }
+            else
+            {
+                $this->current_company_service->update([
+                    'name' => $this->name,
+                    'description' => $this->description,
+                    'enabled' => $this->enabled ? 1 : 0,
+                ]);
+            }
+            session()->flash('success','Dati salvati con successo');
+            $this->resetFields();
+            $this->is_edit = false;
+        } catch (\Exception $ex) {
+            session()->flash('error','Errore (' . $ex->getMessage() . ')');
+        }
+    }
+
+    public function cancel()
+    {
+        $this->resetFields();
+        $this->is_edit = false;
+        $this->current_company_service = null;
+    }
+
 }

+ 88 - 0
app/Livewire/Resource.php

@@ -0,0 +1,88 @@
+<?php
+
+namespace App\Livewire;
+
+use Livewire\Component;
+use Livewire\Attributes\Validate;
+
+class Resource extends Component
+{
+
+    #[Validate('required')] 
+    public $first_name = '';
+    public $last_name = '';
+    public $birth_day = null;
+    public $birth_place_id = null;
+    public $fiscal_code = '';
+    public $phone = '';
+    public $email = '';
+    public $address = '';
+    public $zip = '';
+    public $city_id = null;
+    public $country_id = null;
+    public $domicile = '';
+    public $enabled = true;
+
+    public $current_resource = null;
+
+    public $is_edit = false;
+
+    public function render()
+    {
+
+        // Get Resource
+        $this->current_resource = \App\Models\Resource::first();
+
+        if ($this->current_resource != null)
+        {
+
+            $this->first_name = $this->current_resource->first_name;
+            $this->last_name = $this->current_resource->last_name;
+            $this->birth_day = $this->current_resource->birth_day;
+            $this->birth_place_id = $this->current_resource->birth_place_id;
+            $this->fiscal_code = $this->current_resource->fiscal_code;
+            $this->phone = $this->current_resource->phone;
+            $this->email = $this->current_resource->email;
+            $this->address = $this->current_resource->address;
+            $this->zip = $this->current_resource->zip;
+            $this->city_id = $this->current_resource->city_id;
+            $this->country_id = $this->current_resource->country_id;
+            $this->domicile = $this->current_resource->domicile;
+            $this->enabled = $this->current_resource->enabled;
+
+        }
+
+        return view('livewire.resource');
+    }
+
+    public function update()
+    {
+
+        $this->validate();
+
+        try {
+            $this->current_resource->update([
+                'first_name' => $this->first_name,
+                'last_name' => $this->last_name,
+                'birth_day' => $this->birth_day,
+                'birth_place_id' => $this->birth_place_id,
+                'fiscal_code' => $this->fiscal_code,
+                'phone' => $this->phone,
+                'email' => $this->email,
+                'address' => $this->address,
+                'zip' => $this->zip,
+                'city_id' => $this->city_id,
+                'country_id' => $this->country_id,
+                'domicile' => $this->domicile,
+                'enabled' => $this->enabled,
+            ]);
+            session()->flash('success','Dato aggiornato');
+            //$this->resetFields();
+            $this->is_edit = false;
+        } catch (\Exception $ex) {
+            session()->flash('error','Errore (' . $ex->getMessage() . ')');
+        }
+
+    }
+
+}

+ 129 - 0
app/Livewire/ResourceContract.php

@@ -0,0 +1,129 @@
+<?php
+
+namespace App\Livewire;
+use Illuminate\Support\Facades\Log;
+use Illuminate\Support\Facades\DB;
+use Livewire\Attributes\Validate;
+use Livewire\Component;
+use Livewire\Attributes\Layout;
+
+class ResourceContract extends Component
+{
+
+    public $resource;
+
+    public $current_resource_contract = null;
+
+    public $resource_contracts = [];
+
+    public $contract_types = [];
+
+    // #[Validate('required')] 
+    public $contract_type_id = null;
+    public $contract_date = null;
+    public $contract_number = '';
+    public $position = '';
+    public $role = '';
+    public $start_date = null;
+    public $end_date = null;
+    public $notes = '';
+    public $enabled = 1;
+
+    public $is_edit = false;
+
+    public function resetFields(){
+        $this->contract_type_id = null;
+        $this->contract_date = null;
+        $this->contract_number = '';
+        $this->position = '';
+        $this->role = '';
+        $this->start_date = null;
+        $this->end_date = null;
+        $this->notes = '';    
+        $this->enabled = 1;
+    }
+
+    public function mount()
+    {
+        $this->contract_types = \App\Models\ContractType::all();
+    }
+
+    public function render()
+    {
+        $this->resource_contracts = $this->resource->contracts ?? [];
+        return view('livewire.resource_contract');
+    }
+
+    public function add()
+    {
+        $this->resetFields();
+        $this->is_edit = true;
+        $this->current_resource_contract = null;
+    }
+
+    public function edit($id)
+    {
+        $this->resetFields();
+        $this->is_edit = true;
+        $this->current_resource_contract = \App\Models\ResourceContract::findOrFail($id);
+        $this->contract_type_id = $this->current_resource_contract->contract_type_id;
+        $this->contract_date = $this->current_resource_contract->contract_date;
+        $this->contract_number = $this->current_resource_contract->contract_number;
+        $this->position = $this->current_resource_contract->position;
+        $this->role = $this->current_resource_contract->role;
+        $this->start_date = $this->current_resource_contract->start_date;
+        $this->end_date = $this->current_resource_contract->end_date;
+        $this->notes = $this->current_resource_contract->notes;
+        $this->enabled = $this->current_resource_contract->enabled == 1;
+    }
+
+    public function save()
+    {
+        $this->validate();
+        try 
+        {
+            if ($this->current_resource_contract == null)
+            {
+                \App\Models\ResourceContract::create([
+                    'resource_id' => $this->resource->id,
+                    'contract_type_id' => $this->contract_type_id,
+                    'contract_date' => $this->contract_date,
+                    'contract_number' => $this->contract_number,
+                    'position' => $this->position,
+                    'role' => $this->role,
+                    'start_date' => $this->start_date,
+                    'end_date' => $this->end_date,
+                    'notes' => $this->notes,
+                    'enabled' => $this->enabled
+                ]);
+            }
+            else
+            {
+                $this->current_resource_contract->update([
+                    'contract_type_id' => $this->contract_type_id,
+                    'contract_date' => $this->contract_date,
+                    'contract_number' => $this->contract_number,
+                    'position' => $this->position,
+                    'role' => $this->role,
+                    'start_date' => $this->start_date,
+                    'end_date' => $this->end_date,
+                    'notes' => $this->notes,
+                    'enabled' => $this->enabled ? 1 : 0,
+                ]);
+            }
+            session()->flash('success','Dati salvati con successo');
+            $this->resetFields();
+            $this->is_edit = false;
+        } catch (\Exception $ex) {
+            session()->flash('error','Errore (' . $ex->getMessage() . ')');
+        }
+    }
+
+    public function cancel()
+    {
+        $this->resetFields();
+        $this->is_edit = false;
+        $this->current_resource_contract = null;
+    }
+
+}

+ 109 - 0
app/Livewire/ResourceDocument.php

@@ -0,0 +1,109 @@
+<?php
+
+namespace App\Livewire;
+use Illuminate\Support\Facades\Log;
+use Illuminate\Support\Facades\DB;
+use Livewire\Attributes\Validate;
+use Livewire\Component;
+use Livewire\Attributes\Layout;
+
+class ResourceDocument extends Component
+{
+
+    public $resource;
+
+    public $current_resource_document = null;
+
+    public $resource_documents = [];
+
+    // #[Validate('required')] 
+    public $document_type = '';
+    public $name = '';
+    public $description = '';
+    public $file = '';
+    public $enabled = 1;
+
+    public $is_edit = false;
+
+    public function resetFields(){
+        $this->document_type = null;
+        $this->name = null;
+        $this->description = '';
+        $this->file = '';
+        $this->enabled = 1;
+    }
+
+    public function render()
+    {
+        $this->resource_documents = $this->resource->documents ?? [];
+        return view('livewire.resource_document');
+    }
+
+    public function add()
+    {
+        $this->resetFields();
+        $this->is_edit = true;
+        $this->current_resource_document = null;
+    }
+
+    public function edit($id)
+    {
+
+        $file = '';
+
+        $this->resetFields();
+        $this->is_edit = true;
+        $this->current_resource_document = \App\Models\ResourceDocument::findOrFail($id);
+        $this->document_type = $this->current_resource_document->contract_type_id;
+        $this->name = $this->current_resource_document->contract_date;
+        $this->description = $this->current_resource_document->contract_number;
+        $this->file = $file; // TODO - gestire file old
+        $this->enabled = $this->current_resource_document->enabled == 1;
+    }
+
+    public function save()
+    {
+        $this->validate();
+        try 
+        {
+
+            // TODO - gestire file upload
+            $file = '';
+
+            if ($this->current_resource_document == null)
+            {
+                \App\Models\ResourceContract::create([
+                    'resource_id' => $this->resource->id,
+                    'document_type' => $this->document_type,
+                    'name' => $this->name,
+                    'description' => $this->description,
+                    'file' => $file,
+                    'enabled' => $this->enabled
+                ]);
+            }
+            else
+            {
+                $this->current_resource_document->update([
+                    'document_type' => $this->document_type,
+                    'name' => $this->name,
+                    'description' => $this->description,
+                    'file' => $file,
+                    'enabled' => $this->enabled ? 1 : 0,
+                ]);
+            }
+            session()->flash('success','Dati salvati con successo');
+            $this->resetFields();
+            $this->is_edit = false;
+        } catch (\Exception $ex) {
+            session()->flash('error','Errore (' . $ex->getMessage() . ')');
+        }
+    }
+
+    public function cancel()
+    {
+        $this->resetFields();
+        $this->is_edit = false;
+        $this->current_resource_document = null;
+    }
+
+}

+ 124 - 0
app/Livewire/ResourceEquipment.php

@@ -0,0 +1,124 @@
+<?php
+
+namespace App\Livewire;
+use Illuminate\Support\Facades\Log;
+use Illuminate\Support\Facades\DB;
+use Livewire\Attributes\Validate;
+use Livewire\Component;
+use Livewire\Attributes\Layout;
+
+class ResourceEquipment extends Component
+{
+
+    public $resource;
+
+    public $current_resource_equipment = null;
+
+    public $resource_equipments = [];
+
+    public $equipment_categories = [];
+
+    // #[Validate('required')] 
+    public $equipment_category_id = null;
+    public $name = '';
+    public $start_date = null;
+    public $end_date = null;
+    public $supplier = '';
+    public $sku = '';
+    public $description = '';
+    public $enabled = 1;
+
+    public $is_edit = false;
+
+    public function resetFields(){
+        $this->equipment_category_id = null;
+        $this->name = '';
+        $this->start_date = null;
+        $this->end_date = null;
+        $this->supplier = '';
+        $this->sku = '';        
+        $this->description = '';    
+        $this->enabled = 1;
+    }
+
+    public function mount()
+    {
+        $this->equipment_categories = \App\Models\EquipmentCategory::all();
+    }
+
+    public function render()
+    {
+        $this->resource_equipments = $this->resource->equipments ?? [];
+        return view('livewire.resource_equipment');
+    }
+
+    public function add()
+    {
+        $this->resetFields();
+        $this->is_edit = true;
+        $this->current_resource_equipment = null;
+    }
+
+    public function edit($id)
+    {
+        $this->resetFields();
+        $this->is_edit = true;
+        $this->current_resource_equipment = \App\Models\ResourceEquipment::findOrFail($id);
+        $this->equipment_category_id = $this->current_resource_equipment->equipment_category_id;
+        $this->name = $this->current_resource_equipment->name;
+        $this->start_date = $this->current_resource_equipment->start_date;
+        $this->end_date = $this->current_resource_equipment->end_date;
+        $this->supplier = $this->current_resource_equipment->supplier;
+        $this->sku = $this->current_resource_equipment->sku;
+        $this->description = $this->current_resource_equipment->description;
+        $this->enabled = $this->current_resource_equipment->enabled == 1;
+    }
+
+    public function save()
+    {
+        $this->validate();
+        try 
+        {
+            if ($this->current_resource_equipment == null)
+            {
+                \App\Models\ResourceEquipment::create([
+                    'resource_id' => $this->resource->id,
+                    'equipment_category_id' => $this->equipment_category_id,
+                    'name' => $this->name,
+                    'start_date' => $this->start_date,
+                    'end_date' => $this->end_date,
+                    'supplier' => $this->supplier,
+                    'sku' => $this->sku,
+                    'description' => $this->description,
+                    'enabled' => $this->enabled
+                ]);
+            }
+            else
+            {
+                $this->current_resource_equipment->update([
+                    'equipment_category_id' => $this->equipment_category_id,
+                    'name' => $this->name,
+                    'start_date' => $this->start_date,
+                    'end_date' => $this->end_date,
+                    'supplier' => $this->supplier,
+                    'sku' => $this->sku,
+                    'description' => $this->description,
+                    'enabled' => $this->enabled
+                ]);
+            }
+            session()->flash('success','Dati salvati con successo');
+            $this->resetFields();
+            $this->is_edit = false;
+        } catch (\Exception $ex) {
+            session()->flash('error','Errore (' . $ex->getMessage() . ')');
+        }
+    }
+
+    public function cancel()
+    {
+        $this->resetFields();
+        $this->is_edit = false;
+        $this->current_resource_equipment = null;
+    }
+
+}

+ 118 - 0
app/Livewire/ResourceRate.php

@@ -0,0 +1,118 @@
+<?php
+
+namespace App\Livewire;
+use Illuminate\Support\Facades\Log;
+use Illuminate\Support\Facades\DB;
+use Livewire\Attributes\Validate;
+use Livewire\Component;
+use Livewire\Attributes\Layout;
+
+class ResourceRate extends Component
+{
+
+    public $resource;
+
+    public $current_resource_rate = null;
+
+    public $resource_rates = [];
+
+    public $rate_groups = [];
+    public $rate_types = [];
+    public $company_rates = [];
+
+    // #[Validate('required')] 
+    public $rate_group_id = null;
+    public $rate_type_id = null;
+    public $company_rate_id = null;
+    public $cost = 0;
+    public $price = 0;
+    public $enabled = 1;
+
+    public $is_edit = false;
+
+    public function resetFields(){
+        $this->rate_group_id = null;
+        $this->rate_type_id = null;
+        $this->company_rate_id = null;
+        $this->cost = 0;
+        $this->price = 0;
+        $this->enabled = 1;
+    }
+
+    public function mount()
+    {
+        $this->rate_groups = \App\Models\RateGroup::all();
+        $this->rate_types = \App\Models\RateType::all();
+        $this->company_rates = \App\Models\CompanyRate::all();
+    }
+
+    public function render()
+    {
+        $this->resource_rates = $this->resource->rates ?? [];
+        return view('livewire.resource_rate');
+    }
+
+    public function add()
+    {
+        $this->resetFields();
+        $this->is_edit = true;
+        $this->current_resource_rate = null;
+    }
+
+    public function edit($id)
+    {
+        $this->resetFields();
+        $this->is_edit = true;
+        $this->current_resource_rate = \App\Models\ResourceRate::findOrFail($id);
+        $this->rate_group_id = $this->current_resource_rate->rate_group_id;
+        $this->rate_type_id = $this->current_resource_rate->rate_type_id;
+        $this->company_rate_id = $this->current_resource_rate->company_rate_id;
+        $this->cost = $this->current_resource_rate->cost;
+        $this->price = $this->current_resource_rate->price;
+        $this->enabled = $this->current_resource_equipment->enabled == 1;
+    }
+
+    public function save()
+    {
+        $this->validate();
+        try 
+        {
+            if ($this->current_resource_rate == null)
+            {
+                \App\Models\ResourceRate::create([
+                    'resource_id' => $this->resource->id,
+                    'rate_group_id' => $this->rate_group_id,
+                    'rate_type_id' => $this->rate_type_id,
+                    'company_rate_id' => $this->company_rate_id,
+                    'cost' => $this->cost,
+                    'price' => $this->price,
+                    'enabled' => $this->enabled
+                ]);
+            }
+            else
+            {
+                $this->current_resource_rate->update([
+                    'rate_group_id' => $this->rate_group_id,
+                    'rate_type_id' => $this->rate_type_id,
+                    'company_rate_id' => $this->company_rate_id,
+                    'cost' => $this->cost,
+                    'price' => $this->price,
+                    'enabled' => $this->enabled
+                ]);
+            }
+            session()->flash('success','Dati salvati con successo');
+            $this->resetFields();
+            $this->is_edit = false;
+        } catch (\Exception $ex) {
+            session()->flash('error','Errore (' . $ex->getMessage() . ')');
+        }
+    }
+
+    public function cancel()
+    {
+        $this->resetFields();
+        $this->is_edit = false;
+        $this->current_resource_rate = null;
+    }
+
+}

+ 19 - 0
app/Models/ContractType.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class ContractType extends Model
+{
+    use HasFactory;
+    use SoftDeletes;
+
+    protected $fillable = [
+        'name',
+        'enabled',
+    ];
+
+}

+ 19 - 0
app/Models/EquipmentCategory.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class EquipmentCategory extends Model
+{
+    use HasFactory;
+    use SoftDeletes;
+
+    protected $fillable = [
+        'name',
+        'enabled',
+    ];
+
+}

+ 19 - 0
app/Models/RateGroup.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class RateGroup extends Model
+{
+    use HasFactory;
+    use SoftDeletes;
+
+    protected $fillable = [
+        'name',
+        'enabled',
+    ];
+
+}

+ 19 - 0
app/Models/RateType.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class RateType extends Model
+{
+    use HasFactory;
+    use SoftDeletes;
+
+    protected $fillable = [
+        'name',
+        'enabled',
+    ];
+
+}

+ 74 - 0
app/Models/Resource.php

@@ -0,0 +1,74 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
+use Illuminate\Support\Facades\Log;
+use Illuminate\Support\Facades\DB;
+
+
+class Resource extends Model
+{
+    use HasFactory;
+    use SoftDeletes;
+
+    public function __construct()
+    {
+        setTenant();
+    }
+
+    protected $fillable = [
+        'user_id',
+        'first_name',
+        'last_name',
+        'birth_day',
+        'birth_place_id',
+        'fiscal_code',
+        'phone',
+        'email',
+        'address',
+        'zip',
+        'city_id',
+        'country_id',
+        'domicile',
+        'enabled',
+    ];
+
+    public function birth_place()
+    {
+        return $this->belongsTo(\App\Models\City::class);
+    }
+
+    public function country()
+    {
+        return $this->belongsTo(\App\Models\Country::class);
+    }
+
+    public function city()
+    {
+        return $this->belongsTo(\App\Models\City::class);
+    }
+
+    public function documents()
+    {
+        return $this->hasMany(\App\Models\ResourceDocument::class);
+    }
+
+    public function contracts()
+    {
+        return $this->hasMany(\App\Models\ResourceContract::class);
+    }
+
+    public function equipments()
+    {
+        return $this->hasMany(\App\Models\ResourceEquipments::class);
+    }
+
+    public function rates()
+    {
+        return $this->hasMany(\App\Models\ResourceRate::class);
+    }
+
+}

+ 36 - 0
app/Models/ResourceContract.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class ResourceContract extends Model
+{
+    use HasFactory;
+    use SoftDeletes;
+
+    protected $fillable = [
+        'resource_id',
+        'contract_type_id',
+        'contract_date',
+        'contract_number',
+        'position',
+        'role',
+        'start_date',
+        'end_date',
+        'notes',
+        'enabled',
+    ];
+
+    public function resource()
+    {
+        return $this->belongsTo(\App\Models\Resource::class);
+    }
+
+    public function contract_type()
+    {
+        return $this->belongsTo(\App\Models\ContractType::class);
+    }
+}

+ 27 - 0
app/Models/ResourceDocument.php

@@ -0,0 +1,27 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class ResourceDocument extends Model
+{
+    use HasFactory;
+    use SoftDeletes;
+
+    protected $fillable = [
+        'resource_id',
+        'document_type',
+        'name',
+        'description',
+        'file',
+        'enabled',
+    ];
+
+    public function resource()
+    {
+        return $this->belongsTo(\App\Models\Resource::class);
+    }
+}

+ 35 - 0
app/Models/ResourceEquipment.php

@@ -0,0 +1,35 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class ResourceEquipment extends Model
+{
+    use HasFactory;
+    use SoftDeletes;
+
+    protected $fillable = [
+        'resource_id',
+        'equipment_category_id',
+        'name',
+        'start_date',
+        'end_date',
+        'supplier',
+        'sku',
+        'description',
+        'enabled',
+    ];
+
+    public function resource()
+    {
+        return $this->belongsTo(\App\Models\Resource::class);
+    }
+
+    public function equipment_category()
+    {
+        return $this->belongsTo(\App\Models\EquipmentCategory::class);
+    }
+}

+ 44 - 0
app/Models/ResourceRate.php

@@ -0,0 +1,44 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class ResourceRate extends Model
+{
+    use HasFactory;
+    use SoftDeletes;
+
+    protected $fillable = [
+        'resource_id',
+        'rate_group_id',
+        'rate_type_id',
+        'company_rate_id',
+        'cost',
+        'price',
+        'enabled',
+    ];
+
+    public function resource()
+    {
+        return $this->belongsTo(\App\Models\Resource::class);
+    }
+
+    public function rate_group()
+    {
+        return $this->belongsTo(\App\Models\RateGroup::class);
+    }
+
+    public function rate_type()
+    {
+        return $this->belongsTo(\App\Models\RateType::class);
+    }
+
+    public function company_rate()
+    {
+        return $this->belongsTo(\App\Models\CompanyRate::class);
+    }
+
+}

+ 0 - 0
database/migrations/2025_18_08_161031_create_company_activities_table.php → database/migrations/2025_08_08_161031_create_company_activities_table.php


+ 0 - 0
database/migrations/2025_18_08_161031_create_company_rates_table.php → database/migrations/2025_08_08_161031_create_company_rates_table.php


+ 31 - 0
database/migrations/2025_09_05_100000_create_contract_types_table.php

@@ -0,0 +1,31 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+use App\Database\Migrations\TenantMigration;
+
+return new class extends TenantMigration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('contract_types', function (Blueprint $table) {
+            $table->id();
+            $table->string('name');
+            $table->boolean('enabled')->default(1);
+            $table->softDeletes();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('contract_types');
+    }
+};

+ 31 - 0
database/migrations/2025_09_05_100000_create_equipment_categories_table.php

@@ -0,0 +1,31 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+use App\Database\Migrations\TenantMigration;
+
+return new class extends TenantMigration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('equipment_categories', function (Blueprint $table) {
+            $table->id();
+            $table->string('name');
+            $table->boolean('enabled')->default(1);
+            $table->softDeletes();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('equipment_categories');
+    }
+};

+ 31 - 0
database/migrations/2025_09_05_100000_create_rate_groups_table.php

@@ -0,0 +1,31 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+use App\Database\Migrations\TenantMigration;
+
+return new class extends TenantMigration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('rate_groups', function (Blueprint $table) {
+            $table->id();
+            $table->string('name');
+            $table->boolean('enabled')->default(1);
+            $table->softDeletes();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('rate_groups');
+    }
+};

+ 31 - 0
database/migrations/2025_09_05_100000_create_rate_types_table.php

@@ -0,0 +1,31 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+use App\Database\Migrations\TenantMigration;
+
+return new class extends TenantMigration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('rate_types', function (Blueprint $table) {
+            $table->id();
+            $table->string('name');
+            $table->boolean('enabled')->default(1);
+            $table->softDeletes();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('rate_types');
+    }
+};

+ 47 - 0
database/migrations/2025_09_05_103000_create_resources_table.php

@@ -0,0 +1,47 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+use App\Database\Migrations\TenantMigration;
+
+return new class extends TenantMigration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('resources', function (Blueprint $table) {
+            $table->id();
+            $table->unsignedBigInteger('user_id')->nullable();
+            //$table->foreign('birth_place_id')->nullable()->references('id')->on('cities')->onUpdate('cascade')->onDelete('cascade');
+            $table->string('first_name')->nullable();
+            $table->string('last_name')->nullable();
+            $table->date('birth_day')->nullable();
+            $table->unsignedBigInteger('birth_place_id')->nullable();
+            $table->foreign('birth_place_id')->nullable()->references('id')->on('cities')->onUpdate('cascade')->onDelete('cascade');
+            $table->string('fiscal_code')->nullable();
+            $table->string('phone')->nullable();
+            $table->string('email')->nullable();
+            $table->string('address')->nullable();
+            $table->string('zip')->nullable();
+            $table->unsignedBigInteger('city_id')->nullable();
+            $table->foreign('city_id')->nullable()->references('id')->on('cities')->onUpdate('cascade')->onDelete('cascade');
+            $table->unsignedBigInteger('country_id')->nullable();
+            $table->foreign('country_id')->nullable()->references('id')->on('countries')->onUpdate('cascade')->onDelete('cascade');
+            $table->boolean('domicile')->default(1);
+            $table->boolean('enabled')->default(1);
+            $table->softDeletes();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('resources');
+    }
+};

+ 41 - 0
database/migrations/2025_09_05_110000_create_resource_contracts_table.php

@@ -0,0 +1,41 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+use App\Database\Migrations\TenantMigration;
+
+return new class extends TenantMigration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('resource_contracts', function (Blueprint $table) {
+            $table->id();
+            $table->unsignedBigInteger('resource_id')->nullable();
+            $table->foreign('resource_id')->nullable()->references('id')->on('resources')->onUpdate('cascade')->onDelete('cascade');
+            $table->unsignedBigInteger('contract_type_id')->nullable();
+            $table->foreign('contract_type_id')->nullable()->references('id')->on('contract_types')->onUpdate('cascade')->onDelete('cascade');
+            $table->date('contract_date')->nullable();
+            $table->string('contract_number')->nullable();
+            $table->string('position')->nullable();
+            $table->string('role')->nullable();
+            $table->date('start_date')->nullable();
+            $table->date('end_date')->nullable();
+            $table->text('notes')->nullable();
+            $table->boolean('enabled')->default(1);
+            $table->softDeletes();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('resource_contracts');
+    }
+};

+ 36 - 0
database/migrations/2025_09_05_110000_create_resource_documents_table.php

@@ -0,0 +1,36 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+use App\Database\Migrations\TenantMigration;
+
+return new class extends TenantMigration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('resource_documents', function (Blueprint $table) {
+            $table->id();
+            $table->unsignedBigInteger('resource_id')->nullable();
+            $table->foreign('resource_id')->nullable()->references('id')->on('resources')->onUpdate('cascade')->onDelete('cascade');
+            $table->string('document_type')->nullable();
+            $table->string('name')->nullable();
+            $table->text('description')->nullable();
+            $table->string('file')->nullable();
+            $table->boolean('enabled')->default(1);
+            $table->softDeletes();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('resource_documents');
+    }
+};

+ 40 - 0
database/migrations/2025_09_05_110000_create_resource_equipments_table.php

@@ -0,0 +1,40 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+use App\Database\Migrations\TenantMigration;
+
+return new class extends TenantMigration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('resource_equipments', function (Blueprint $table) {
+            $table->id();
+            $table->unsignedBigInteger('resource_id')->nullable();
+            $table->foreign('resource_id')->nullable()->references('id')->on('resources')->onUpdate('cascade')->onDelete('cascade');
+            $table->unsignedBigInteger('equipment_category_id')->nullable();
+            $table->foreign('equipment_category_id')->nullable()->references('id')->on('equipment_categories')->onUpdate('cascade')->onDelete('cascade');
+            $table->string('name')->nullable();
+            $table->date('start_date')->nullable();
+            $table->date('end_date')->nullable();
+            $table->string('supplier')->nullable();
+            $table->string('sku')->nullable();
+            $table->text('description')->nullable();    
+            $table->boolean('enabled')->default(1);        
+            $table->softDeletes();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('resource_equipments');
+    }
+};

+ 40 - 0
database/migrations/2025_09_05_110000_create_resource_rates_table.php

@@ -0,0 +1,40 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+use App\Database\Migrations\TenantMigration;
+
+return new class extends TenantMigration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('resource_rates', function (Blueprint $table) {
+            $table->id();
+            $table->unsignedBigInteger('resource_id')->nullable();
+            $table->foreign('resource_id')->nullable()->references('id')->on('resources')->onUpdate('cascade')->onDelete('cascade');
+            $table->unsignedBigInteger('rate_group_id')->nullable();
+            $table->foreign('rate_group_id')->nullable()->references('id')->on('rate_groups')->onUpdate('cascade')->onDelete('cascade');
+            $table->unsignedBigInteger('rate_type_id')->nullable();
+            $table->foreign('rate_type_id')->nullable()->references('id')->on('rate_types')->onUpdate('cascade')->onDelete('cascade');
+            $table->unsignedBigInteger('company_rate_id')->nullable();
+            $table->foreign('company_rate_id')->nullable()->references('id')->on('company_rates')->onUpdate('cascade')->onDelete('cascade');
+            $table->decimal('cost', total: 8, places: 2);
+            $table->decimal('price', total: 8, places: 2);
+            $table->boolean('enabled')->default(1);
+            $table->softDeletes();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('resource_rates');
+    }
+};

+ 14 - 0
resources/views/livewire/resource.blade.php

@@ -0,0 +1,14 @@
+<div>
+    Resource
+    <br>
+    {{$first_name}}
+    <br><br>
+    <livewire:resource-contract :recource="$current_resource"/>
+    <br><br>
+    <livewire:resource-document :recource="$current_resource"/>
+    <br><br>
+    <livewire:resource-equipment :recource="$current_resource"/>
+    <br><br>
+    <livewire:resource-rate :recource="$current_resource"/>
+    <br><br>
+</div>

+ 4 - 0
resources/views/livewire/resource_contract.blade.php

@@ -0,0 +1,4 @@
+<div>
+    RESOURCE contract
+    <br>    
+</div>

+ 4 - 0
resources/views/livewire/resource_document.blade.php

@@ -0,0 +1,4 @@
+<div>
+    RESOURCE document
+    <br>    
+</div>

+ 4 - 0
resources/views/livewire/resource_equipment.blade.php

@@ -0,0 +1,4 @@
+<div>
+    RESOURCE equipment
+    <br>    
+</div>

+ 4 - 0
resources/views/livewire/resource_rate.blade.php

@@ -0,0 +1,4 @@
+<div>
+    RESOURCE rate
+    <br>    
+</div>

+ 1 - 0
routes/web.php

@@ -15,6 +15,7 @@ Route::middleware([TenantMiddleware::class])->group(function () {
 
         Route::get('/dashboard', \App\Livewire\Dashboard::class)->name('dashboard');
         Route::get('/company', \App\Livewire\Company::class)->name('company');
+        Route::get('/resources', \App\Livewire\Resource::class)->name('resource');
         //Route::get('/company_service', \App\Livewire\CompanyService::class)->name('company_service');
 
     });