![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/medad.corals.io/Corals/modules/Medad/Policies/ |
<?php namespace Corals\Modules\Medad\Policies; use Corals\Modules\Medad\Constants\CompanyTypeConstants; use Corals\Modules\Medad\Facades\Medad; use Corals\Modules\Medad\Models\DeliveryNote; use Corals\Modules\Medad\Traits\MedadItemsAccessTrait; use Corals\User\Models\User; class DeliveryNotePolicy extends MedadPolicy { use MedadItemsAccessTrait; protected $administrationPermission = 'Administrations::admin.medad'; /** * @param User $user * @param DeliveryNote|null $deliveryNote * @return bool */ public function view(User $user, DeliveryNote $deliveryNote = null) { if ($user->can('Medad::delivery_note.view') && $this->canAccess($deliveryNote, false)) { return true; } return false; } /** * @param User $user * @return bool */ public function create(User $user) { return $user->can('Medad::delivery_note.create'); } /** * @param User $user * @param DeliveryNote $deliveryNote * @return bool */ public function update(User $user, DeliveryNote $deliveryNote) { if (($user->can('Medad::delivery_note.update') && $this->canAccess($deliveryNote) && $deliveryNote->status == 'draft') && ( $this->isAdministrator($user) || $deliveryNote->owner_id == $user->id )) { return true; } return false; } /** * @param User $user * @param DeliveryNote $deliveryNote * @return bool */ public function destroy(User $user, DeliveryNote $deliveryNote) { if ($user->can('Medad::delivery_note.delete') && $this->canAccess($deliveryNote) && $deliveryNote->status == 'draft') { return true; } return false; } public function tracking(User $user, DeliveryNote $deliveryNote) { return $this->view($user, $deliveryNote); } /** * @param User $user * @param DeliveryNote $deliveryNote * @return bool */ public function startDelivery(User $user, DeliveryNote $deliveryNote) { return $this->canAccess($deliveryNote, false) && $deliveryNote->status == 'assigned' && $deliveryNote->driver_id == $user->id; } /** * @param User $user * @param DeliveryNote $deliveryNote * @return bool */ public function markAsDelivered(User $user, DeliveryNote $deliveryNote) { return $this->canAccess($deliveryNote, false) && $deliveryNote->status == 'started' && $deliveryNote->driver_id == $user->id; } /** * @param User $user * @param DeliveryNote $deliveryNote * @return bool */ public function updateDriver(User $user, DeliveryNote $deliveryNote) { return $user->can('Medad::delivery_note.update_driver') && in_array($deliveryNote->status, ['open', 'assigned']) && $this->canAccess($deliveryNote, false) && Medad::getCurrentCompanyType() == CompanyTypeConstants::SUPPLIER; } /** * @param User $user * @param DeliveryNote $deliveryNote * @return bool */ public function assignToMe(User $user, DeliveryNote $deliveryNote) { if ($this->canAccess($deliveryNote, false) && $user->hasRole('medad_driver') && $deliveryNote->driver_id == null && $deliveryNote->status == 'open') { return true; } return false; } /** * @param User $user * @param DeliveryNote $deliveryNote * @return bool */ public function recipientDetails(User $user, DeliveryNote $deliveryNote) { if (!is_api_request()) { return false; } if ($user->hasRole('medad_driver')) { if ($deliveryNote->driver_id != $user->id) { return false; } } foreach (['recipient_name', 'recipient_phone', 'recipient_id_number'] as $attribute) { if ($deliveryNote->{$attribute}) { return false; } } return $this->canAccess($deliveryNote, false) && $deliveryNote->status == 'delivered'; } /** * @param User $user * @param DeliveryNote $deliveryNote * @return bool */ public function markAsReceived(User $user, DeliveryNote $deliveryNote) { $userCompany = Medad::getUserCompany(); if (!$userCompany) { return false; } return $userCompany->id == $deliveryNote->customer_company_id && $deliveryNote->status == 'delivered' && Medad::getCurrentCompanyType() == CompanyTypeConstants::CUSTOMER; } /** * @param User $user * @param DeliveryNote $deliveryNote * @return bool */ public function markAsCancel(User $user, DeliveryNote $deliveryNote) { return $this->canAccess($deliveryNote, false) && $deliveryNote->status == 'started' && $deliveryNote->driver_id == $user->id; } /** * @param User $user * @param DeliveryNote $deliveryNote * @return bool */ public function release(User $user, DeliveryNote $deliveryNote) { return $deliveryNote->driver_id == $user->id && $this->canAccess($deliveryNote, false) && $deliveryNote->status == 'assigned'; } }