芝麻web文件管理V1.00
编辑当前文件:/home/sditechnicalteam/public_html/app/Http/Controllers/ContractController.php
pageTitle = 'app.menu.contracts'; $this->middleware(function ($request, $next) { abort_403(!in_array('contracts', $this->user->modules)); return $next($request); }); } public function index(ContractsDataTable $dataTable) { abort_403(user()->permission('view_contract') == 'none'); if (!request()->ajax()) { if (in_array('client', user_roles())) { $this->clients = User::client(); } else { $this->clients = User::allClients(); } $this->contractTypes = ContractType::all(); $this->contractCounts = Contract::count(); $this->expiredCounts = Contract::where(DB::raw('DATE(`end_date`)'), '<', now()->format('Y-m-d'))->count(); $this->aboutToExpireCounts = Contract::where(DB::raw('DATE(`end_date`)'), '>', now()->format('Y-m-d')) ->where(DB::raw('DATE(`end_date`)'), '<', now()->timezone($this->company->timezone)->addDays(7)->format('Y-m-d')) ->count(); } return $dataTable->render('contracts.index', $this->data); } public function applyQuickAction(Request $request) { if ($request->action_type == 'delete') { $this->deleteRecords($request); return Reply::success(__('messages.deleteSuccess')); } return Reply::error(__('messages.selectAction')); } protected function deleteRecords($request) { abort_403(user()->permission('delete_contract') !== 'all'); Contract::whereIn('id', explode(',', $request->row_ids))->delete(); return true; } public function destroy($id) { $contract = Contract::findOrFail($id); $this->deletePermission = user()->permission('delete_contract'); abort_403(!( $this->deletePermission == 'all' || ($this->deletePermission == 'added' && user()->id == $contract->added_by) || ($this->deletePermission == 'owned' && user()->id == $contract->client_id) || ($this->deletePermission == 'both' && (user()->id == $contract->client_id || user()->id == $contract->added_by) ))); Contract::destroy($id); return Reply::success(__('messages.contactDeleted')); } public function create() { $this->addPermission = user()->permission('add_contract'); abort_403(!in_array($this->addPermission, ['all', 'added'])); $this->contractId = request('id'); $this->contract = null; if ($this->contractId != '') { $this->contractTemplate = Contract::findOrFail($this->contractId); } $this->templates = ContractTemplate::all(); $this->clients = User::allClients(null, ($this->addPermission == 'all' ? 'all' : null)); $this->contractTypes = ContractType::all(); $this->currencies = Currency::all(); if (is_null($this->contractId)) { $this->contractTemplate = request('template') ? ContractTemplate::findOrFail(request('template')) : null; } if (request()->ajax()) { $this->pageTitle = __('app.add') . ' ' . __('app.menu.contract'); $html = view('contracts.ajax.create', $this->data)->render(); return Reply::dataOnly(['status' => 'success', 'html' => $html, 'title' => $this->pageTitle]); } $this->view = 'contracts.ajax.create'; return view('contracts.create', $this->data); } public function store(StoreRequest $request) { $contract = new Contract(); $this->storeUpdate($request, $contract); return Reply::redirect(route('contracts.index'), __('messages.contractAdded')); } public function edit($id) { $this->editPermission = user()->permission('edit_contract'); $this->contract = Contract::with('signature', 'renewHistory', 'renewHistory.renewedBy')->findOrFail($id); abort_403(!( $this->editPermission == 'all' || ($this->editPermission == 'added' && user()->id == $this->contract->added_by) || ($this->editPermission == 'owned' && user()->id == $this->contract->client_id) || ($this->editPermission == 'both' && (user()->id == $this->contract->client_id || user()->id == $this->contract->added_by) ))); $this->clients = User::allClients(null, ($this->editPermission == 'all' ? 'all' : null)); $this->contractTypes = ContractType::all(); $this->currencies = Currency::all(); if (request()->ajax()) { $this->pageTitle = __('app.update') . ' ' . __('app.menu.contract'); $html = view('contracts.ajax.edit', $this->data)->render(); return Reply::dataOnly(['status' => 'success', 'html' => $html, 'title' => $this->pageTitle]); } $this->view = 'contracts.ajax.edit'; return view('contracts.create', $this->data); } public function update(UpdateRequest $request, $id) { $contract = Contract::findOrFail($id); $this->storeUpdate($request, $contract); return Reply::redirect(route('contracts.index'), __('messages.contractUpdated')); } private function storeUpdate($request, $contract) { $contract->client_id = $request->client_id; $contract->subject = $request->subject; $contract->amount = $request->amount; $contract->currency_id = $request->currency_id; $contract->original_amount = $request->amount; $contract->contract_name = $request->contract_name; $contract->alternate_address = $request->alternate_address; $contract->contract_note = $request->note; $contract->cell = $request->cell; $contract->office = $request->office; $contract->city = $request->city; $contract->state = $request->state; $contract->country = $request->country; $contract->postal_code = $request->postal_code; $contract->contract_type_id = $request->contract_type; $contract->start_date = Carbon::createFromFormat($this->company->date_format, $request->start_date)->format('Y-m-d'); $contract->original_start_date = Carbon::createFromFormat($this->company->date_format, $request->start_date)->format('Y-m-d'); $contract->end_date = $request->end_date == null ? $request->end_date : Carbon::createFromFormat($this->company->date_format, $request->end_date)->format('Y-m-d'); $contract->original_end_date = $request->end_date == null ? $request->end_date : Carbon::createFromFormat($this->company->date_format, $request->end_date)->format('Y-m-d'); $contract->description = trim_editor($request->description); $contract->contract_detail = $request->contract_detail; if ($request->company_logo_delete == 'yes') { Files::deleteFile($contract->company_logo, 'contract-logo'); $contract->company_logo = null; } if ($request->hasFile('company_logo')) { Files::deleteFile($contract->company_logo, 'contract-logo'); $contract->company_logo = Files::upload($request->company_logo, 'contract-logo', 300); } if ($request->contract_detail) { $contract->contract_detail = $request->contract_detail; } $contract->save(); return $contract; } /** * @param int $id * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|mixed|void */ public function show($id) { $viewPermission = user()->permission('view_contract'); $this->addContractPermission = user()->permission('add_contract'); $this->editContractPermission = user()->permission('edit_contract'); $this->deleteContractPermission = user()->permission('delete_contract'); $this->viewDiscussionPermission = $viewDiscussionPermission = user()->permission('view_contract_discussion'); $this->viewContractFilesPermission = $viewContractFilesPermission = user()->permission('view_contract_files'); $this->contract = Contract::with(['signature', 'client', 'client.clientDetails', 'files' => function ($q) use ($viewContractFilesPermission) { if ($viewContractFilesPermission == 'added') { $q->where('added_by', user()->id); } }, 'renewHistory', 'renewHistory.renewedBy', 'discussion' => function ($q) use ($viewDiscussionPermission) { if ($viewDiscussionPermission == 'added') { $q->where('contract_discussions.added_by', user()->id); } }, 'discussion.user'])->findOrFail($id); abort_403(!( $viewPermission == 'all' || ($viewPermission == 'added' && user()->id == $this->contract->added_by) || ($viewPermission == 'owned' && user()->id == $this->contract->client_id) || ($viewPermission == 'both' && (user()->id == $this->contract->client_id || user()->id == $this->contract->added_by)) )); $this->pageTitle = __('modules.contracts.contractNumber') . ' #' . $this->contract->contract_number; $this->view = 'contracts.ajax.summary'; $tab = request('tab'); switch ($tab) { case 'discussion': $this->view = 'contracts.ajax.discussion'; break; case 'files': $this->view = 'contracts.ajax.files'; break; case 'renew': $this->view = 'contracts.ajax.renew'; break; default: $this->view = 'contracts.ajax.summary'; break; } if (request()->ajax()) { $html = view($this->view, $this->data)->render(); return Reply::dataOnly(['status' => 'success', 'html' => $html, 'title' => $this->pageTitle]); } $this->activeTab = $tab ?: 'profile'; return view('contracts.show', $this->data); } public function download($id) { $this->contract = Contract::findOrFail($id); $viewPermission = user()->permission('view_contract'); $this->contract = Contract::with('signature', 'client', 'client.clientDetails', 'files')->findOrFail($id); abort_403(!( $viewPermission == 'all' || ($viewPermission == 'added' && user()->id == $this->contract->added_by) || ($viewPermission == 'owned' && user()->id == $this->contract->client_id) || ($viewPermission == 'both' && (user()->id == $this->contract->client_id || user()->id == $this->contract->added_by)) )); $pdf = app('dompdf.wrapper'); $this->company = $this->settings = company(); $this->invoiceSetting = invoice_setting(); $pdf->getDomPDF()->set_option('enable_php', true); App::setLocale($this->invoiceSetting->locale); Carbon::setLocale($this->invoiceSetting->locale); $pdf->loadView('contracts.contract-pdf', $this->data); $dom_pdf = $pdf->getDomPDF(); $canvas = $dom_pdf->getCanvas(); $canvas->page_text(530, 820, 'Page {PAGE_NUM} of {PAGE_COUNT}', null, 10); $filename = 'contract-' . $this->contract->id; return $pdf->download($filename . '.pdf'); } public function downloadView($id) { $this->contract = Contract::findOrFail($id); $pdf = app('dompdf.wrapper'); $this->company = $this->settings = company(); $this->invoiceSetting = invoice_setting(); $pdf->getDomPDF()->set_option('enable_php', true); App::setLocale($this->invoiceSetting->locale); Carbon::setLocale($this->invoiceSetting->locale); $pdf->loadView('contracts.contract-pdf', $this->data); $dom_pdf = $pdf->getDomPDF(); $canvas = $dom_pdf->getCanvas(); $canvas->page_text(530, 820, 'Page {PAGE_NUM} of {PAGE_COUNT}', null, 10); $filename = 'contract-' . $this->contract->id; return [ 'pdf' => $pdf, 'fileName' => $filename ]; } public function sign(SignRequest $request, $id) { $this->contract = Contract::with('signature')->findOrFail($id); if($this->contract && $this->contract->signature){ return Reply::error(__('messages.alreadySigned')); } $sign = new ContractSign(); $sign->full_name = $request->first_name . ' ' . $request->last_name; $sign->contract_id = $this->contract->id; $sign->email = $request->email; $imageName = null; if ($request->signature_type == 'signature') { $image = $request->signature; // your base64 encoded $image = str_replace('data:image/png;base64,', '', $image); $image = str_replace(' ', '+', $image); $imageName = str_random(32) . '.' . 'jpg'; Files::createDirectoryIfNotExist('contract/sign'); File::put(public_path() . '/' . Files::UPLOAD_FOLDER . '/contract/sign/' . $imageName, base64_decode($image)); } else { if ($request->hasFile('image')) { $imageName = Files::upload($request->image, 'contract/sign', 300); } } $sign->signature = $imageName; $sign->save(); event(new ContractSignedEvent($this->contract, $sign)); return Reply::redirect(route('contracts.show', $this->contract->id)); } }