Spamworldpro Mini Shell
Spamworldpro


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/Http/Controllers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/medad.corals.io/Corals/modules/Medad/Http/Controllers/PurchaseOrdersController.php
<?php

namespace Corals\Modules\Medad\Http\Controllers;

use Corals\Foundation\Http\Controllers\BaseController;
use Corals\Modules\Medad\Constants\CompanyTypeConstants;
use Corals\Modules\Medad\DataTables\PurchaseOrdersDataTable;
use Corals\Modules\Medad\DataTables\Scopes\BranchItemsScope;
use Corals\Modules\Medad\DataTables\Scopes\ProjectDatatableScope;
use Corals\Modules\Medad\Facades\Medad;
use Corals\Modules\Medad\Http\Requests\PurchaseOrderRequest;
use Corals\Modules\Medad\Models\Branch;
use Corals\Modules\Medad\Models\Company;
use Corals\Modules\Medad\Models\Project;
use Corals\Modules\Medad\Models\PurchaseOrder;
use Corals\Modules\Medad\Models\Quotation;
use Corals\Modules\Medad\Services\PurchaseOrderService;
use Corals\Modules\Medad\Services\QuotationService;
use Illuminate\Http\Request;

class PurchaseOrdersController extends BaseController
{
    protected $purchaseOrderService;

    public function __construct(PurchaseOrderService $purchaseOrderService)
    {
        $this->purchaseOrderService = $purchaseOrderService;

        $this->resource_url = config('medad.models.purchase_order.resource_url');

        $this->title = trans('Medad::module.purchase_order.title');
        $this->title_singular = trans('Medad::module.purchase_order.title_singular');

        parent::__construct();
    }

    /**
     * @param PurchaseOrderRequest $request
     * @return mixed
     */
    public function index(PurchaseOrderRequest $request, PurchaseOrdersDataTable $dataTable)
    {
        $this->setViewSharedData(['hideCreate' => true]);
        return $dataTable->render('Medad::purchase_orders.index');
    }

    /**
     * @param PurchaseOrderRequest $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function store(PurchaseOrderRequest $request)
    {
        try {
            $purchaseOrder = $this->purchaseOrderService->store($request, PurchaseOrder::class);

            $message = [
                'level' => 'success',
                'message' => trans('Corals::messages.success.created', ['item' => $this->title_singular])
            ];
        } catch (\Exception $exception) {
            $message = ['level' => 'error', 'message' => $exception->getMessage()];
            log_exception($exception, PurchaseOrder::class, 'store');
        }

        return response()->json($message);
    }

    /**
     * @param PurchaseOrderRequest $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function show(PurchaseOrderRequest $request, PurchaseOrder $purchaseOrder)
    {
        $this->setViewSharedData([
            'title_singular' => trans('Corals::labels.show_title', ['title' => $purchaseOrder->getIdentifier()]),
            'showModel' => $purchaseOrder,
        ]);

        return view('Medad::purchase_orders.show')->with(compact('purchaseOrder'));
    }

    /**
     * @param PurchaseOrderRequest $request
     * @param PurchaseOrder $purchaseOrder
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
     */
    public function edit(PurchaseOrderRequest $request, PurchaseOrder $purchaseOrder)
    {
        $this->setViewSharedData([
            'title_singular' => trans('Corals::labels.update_title', ['title' => $purchaseOrder->code])
        ]);

        $customerBranch = $purchaseOrder->customerBranch;
        $supplierBranch = $purchaseOrder->supplierBranch;

        $company = $purchaseOrder->customerCompany;
        $customerCompany = $purchaseOrder->customerCompany;
        $supplierCompany = $purchaseOrder->supplierCompany;

        $actingAs = \Medad::getCurrentCompanyType();

        return view('Medad::purchase_orders.create_edit')->with(compact(
            'company',
            'purchaseOrder',
            'customerBranch',
            'customerCompany',
            'supplierCompany',
            'supplierBranch', 'actingAs'));
    }

    /**
     * @param PurchaseOrderRequest $request
     * @param PurchaseOrder $purchaseOrder
     * @return \Illuminate\Http\JsonResponse
     */
    public function update(PurchaseOrderRequest $request, PurchaseOrder $purchaseOrder)
    {
        try {
            $this->purchaseOrderService->update($request, $purchaseOrder);

            $message = [
                'level' => 'success',
                'message' => trans('Corals::messages.success.updated', ['item' => $this->title_singular])
            ];
        } catch (\Exception $exception) {
            $message = ['level' => 'error', 'message' => $exception->getMessage()];
            log_exception($exception, PurchaseOrder::class, 'update');
        }

        return response()->json($message);
    }

    /**
     * @param PurchaseOrderRequest $request
     * @param PurchaseOrder $purchaseOrder
     * @return \Illuminate\Http\JsonResponse
     */
    public function destroy(PurchaseOrderRequest $request, PurchaseOrder $purchaseOrder)
    {
        try {
            $this->purchaseOrderService->destroy($request, $purchaseOrder);

            $message = [
                'level' => 'success',
                'message' => trans('Corals::messages.success.deleted', ['item' => $this->title_singular])
            ];
        } catch (\Exception $exception) {
            log_exception($exception, PurchaseOrder::class, 'destroy');
            $message = ['level' => 'error', 'message' => $exception->getMessage()];
        }

        return response()->json($message);
    }


    public function companyPurchaseOrders(
        PurchaseOrderRequest    $request,
        Company                 $company,
        Branch                  $branch,
        PurchaseOrdersDataTable $dataTable
    )
    {
        if ($request->has('tab_html')) {
            $modelDataTable = new PurchaseOrdersDataTable();
            $modelDataTable->setResourceUrl($request->url());
            return view('Medad::sub_show')->with(compact('modelDataTable'));
        }
        $dataTable->addScope(new BranchItemsScope($branch));

        return $dataTable->renderAjaxAndActions();
    }

    public function projectPurchaseOrders(
        PurchaseOrderRequest    $request,
        Company                 $company,
        Branch                  $branch,
        Project                 $project,
        PurchaseOrdersDataTable $dataTable
    )
    {
        if ($request->has('tab_html')) {
            $modelDataTable = new PurchaseOrdersDataTable();
            $modelDataTable->setResourceUrl($request->url());
            return view('Medad::sub_show')->with(compact('modelDataTable'));
        }
        $dataTable->addScope(new ProjectDatatableScope($project));

        return $dataTable->renderAjaxAndActions();
    }

    public function create(PurchaseOrderRequest $request, Company $company, Branch $branch)
    {
        $purchaseOrder = new PurchaseOrder();

        $this->setViewSharedData([
            'title_singular' => trans('Corals::labels.create_title', ['title' => $this->title_singular])
        ]);

        if ($projectHashedId = $request->get('project')) {
            $purchaseOrder->project_id = optional(Project::findByHash($projectHashedId))->id;
        }
        if (\Medad::getCurrentCompanyType() == CompanyTypeConstants::CUSTOMER) {
            $actingAs = CompanyTypeConstants::CUSTOMER;
            $customerBranch = $branch;
            $customerCompany = $branch->company;

            $supplierBranch = new Branch();
            $supplierCompany = new Company();
        } else {
            $actingAs = CompanyTypeConstants::SUPPLIER;
            $supplierBranch = $branch;
            $supplierCompany = $branch->company;

            $customerBranch = new Branch();
            $customerCompany = new Company();
        }

        return view('Medad::purchase_orders.create_edit')
            ->with(compact('company', 'purchaseOrder', 'customerCompany', 'customerBranch', 'supplierBranch',
                'supplierCompany', 'actingAs'));
    }

    public function generatePurchaseOrder(Request $request, Quotation $quotation)
    {
        $purchaseOrder = new PurchaseOrder();

        return view('Medad::quotations.partials.generate_purchase_order_modal')
            ->with(compact('quotation', 'purchaseOrder'));
    }

    /**
     * @return \Illuminate\Http\JsonResponse
     */
    public function submitGeneratePurchaseOrder(Request $request, Quotation $quotation)
    {
        $this->authorize('addPurchaseOrder', $quotation);

        $request->validate([
            'owner_id' => 'required',
            'types_count' => 'required',
            'total_quantity' => 'required',
            'amount' => 'required',
            'address'=>'required',
            'lat'=>'required',
            'long'=>'required',
        ]);
        if (\Medad::getCurrentCompanyType() == CompanyTypeConstants::CUSTOMER) {
            $request->validate([
                'receivers' => Medad::getCurrentCompanyType() == CompanyTypeConstants::CUSTOMER ? 'required' : 'nullable',
            ]);
        }

        try {
            $purchaseOrder = $this->purchaseOrderService->store($request, PurchaseOrder::class, [
                'quotation_id' => $quotation->id,
                'project_id' => $quotation->project_id,
                'customer_company_id' => $quotation->customer_company_id,
                'customer_branch_id' => $quotation->customer_branch_id,
                'supplier_company_id' => $quotation->supplier_company_id,
                'supplier_branch_id' => $quotation->supplier_branch_id,
            ]);
            $quotationService = new QuotationService();
            $quotationService->orderStatus($quotation, 'ordered');

            $message = [
                'level' => 'success',
                'message' => trans('Corals::messages.success.created', ['item' => $this->title_singular])
            ];
        } catch (\Exception $exception) {
            log_exception($exception, PurchaseOrder::class, 'destroy');
            $message = ['level' => 'error', 'message' => $exception->getMessage()];
        }

        return response()->json($message);
    }

    public function getQuotationValues(Request $request)
    {
        $quotation = Quotation::select('types_count', 'total_quantity', 'amount')
            ->where('id', $request->id)
            ->first();

        $this->authorize('view', $quotation);

        return response()->json($quotation);
    }

    public function getProjectValues(Request $request, Company $company, Branch $branch)
    {
        $project = null;

        if ($request->id) {
            $project = Project::where('id', $request->id)->first();
        }

        $result = [];

        if ($project) {
            if ($request->target == 'both') {
                $result['receivers'] = $project->receivers->pluck('full_name', 'id');
            }

            $result['suppliers'] = $project->projectSuppliers()->pluck('medad_companies.name', 'medad_companies.id');
        } else {
            if ($request->target == 'both') {
                $company = Company::find($request->companyId);
                $result['receivers'] = Medad::getCompanyUsers('medad_company_member', $company);
            }

            $result['suppliers'] = Medad::getCompanySuppliers($branch);
        }

        return response()->json($result);
    }


    /**
     * @return \Illuminate\Http\JsonResponse
     */
    public function markAsClosed(Request $request, PurchaseOrder $purchaseOrder)
    {
        $this->authorize('markAsClosed', $purchaseOrder);
        try {
            $this->purchaseOrderService->markAs($request, $purchaseOrder, 'closed');

            $message = [
                'level' => 'success',
                'message' => trans('Corals::messages.success.updated', ['item' => $this->title_singular])
            ];
        } catch (\Exception $exception) {
            $message = ['level' => 'error', 'message' => $exception->getMessage()];
            log_exception($exception, PurchaseOrder::class, 'update');
        }

        return response()->json($message);
    }

    public function addNote(Request $request, PurchaseOrder $purchaseOrder)
    {
        $model = $purchaseOrder;
        return view('Medad::add_note_modal')->with(compact('model'));
    }

    public function notesList(Request $request, PurchaseOrder $purchaseOrder)
    {
        $this->authorize('notesList', $purchaseOrder);
        $comments = $purchaseOrder->comments;
        return view('Medad::comments')->with(compact('comments'));
    }
}

Spamworldpro Mini