%PDF- %GIF98; %PNG;
Server : ApacheSystem : Linux host.digitalbabaji.in 4.18.0-513.11.1.el8_9.x86_64 #1 SMP Wed Jan 17 02:00:40 EST 2024 x86_64 User : addictionfreeind ( 1003) PHP Version : 7.2.34 Disable Function : exec,passthru,shell_exec,system Directory : /home/addictionfreeind/public_html/admin1/app/Http/Controllers/ |
Upload File : |
<?php
namespace App\Http\Controllers;
use App\DataTables\ContractsDataTable;
use App\Events\ContractSignedEvent;
use App\Helper\Files;
use App\Helper\Reply;
use App\Http\Requests\Admin\Contract\StoreRequest;
use App\Http\Requests\Admin\Contract\UpdateRequest;
use App\Http\Requests\ClientContracts\SignRequest;
use App\Models\BaseModel;
use App\Models\Contract;
use App\Models\ContractSign;
use App\Models\ContractTemplate;
use App\Models\ContractType;
use App\Models\Currency;
use App\Models\Project;
use App\Models\User;
use Carbon\Carbon;
use GPBMetadata\Google\Api\Control;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
class ContractController extends AccountBaseController
{
public function __construct()
{
parent::__construct();
$this->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()) {
$this->projects = Project::allProjects();
if (in_array('client', user_roles())) {
$this->clients = User::client();
}
else {
$this->clients = User::allClients();
}
$this->contract = Contract::all();
$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.deleteSuccess'));
}
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();
$this->projects = Project::all();
$this->lastContract = Contract::lastContractNumber() + 1;
$this->invoiceSetting = invoice_setting();
$this->zero = '';
if (strlen($this->lastContract) < $this->invoiceSetting->contract_digit) {
$condition = $this->invoiceSetting->contract_digit - strlen($this->lastContract);
for ($i = 0; $i < $condition; $i++) {
$this->zero = '0' . $this->zero;
}
}
if (is_null($this->contractId)) {
$this->contractTemplate = request('template') ? ContractTemplate::findOrFail(request('template')) : null;
}
$contract = new Contract();
if ($contract->getCustomFieldGroupsWithFields()) {
$this->fields = $contract->getCustomFieldGroupsWithFields()->fields;
}
if (request()->ajax()) {
$this->pageTitle = __('app.menu.addContract');
$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.recordSaved'));
}
public function edit($id)
{
$this->editPermission = user()->permission('edit_contract');
$this->contract = Contract::with('signature', 'renewHistory', 'renewHistory.renewedBy')
->findOrFail($id)
->withCustomFields();
$this->projects = Project::all();
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();
$this->pageTitle = $this->contract->contract_number;
$contract = new Contract();
if ($contract->getCustomFieldGroupsWithFields()) {
$this->fields = $contract->getCustomFieldGroupsWithFields()->fields;
}
if (request()->ajax()) {
$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.updateSuccess'));
}
private function storeUpdate($request, $contract)
{
$contract->client_id = $request->client_id;
$contract->project_id = $request->project_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->contract_number = $request->contract_number;
$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->contract_detail) {
$contract->contract_detail = $request->contract_detail;
}
$contract->save();
// To add custom fields data
if ($request->custom_fields_data) {
$contract->updateCustomFieldData($request->custom_fields_data);
}
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)->withCustomFields();
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))
));
$contract = new contract();
if ($contract->getCustomFieldGroupsWithFields()) {
$this->fields = $contract->getCustomFieldGroupsWithFields()->fields;
}
$this->pageTitle = $this->contract->contract_number;
$tab = request('tab');
$this->view = match ($tab) {
'discussion' => 'contracts.ajax.discussion',
'files' => 'contracts.ajax.files',
'renew' => 'contracts.ajax.renew',
default => 'contracts.ajax.summary',
};
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)->withCustomFields();
if ($this->contract->getCustomFieldGroupsWithFields()) {
$this->fields = $this->contract->getCustomFieldGroupsWithFields()->fields;
}
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->setOption('enable_php', true);
$pdf->setOptions(['isHtml5ParserEnabled' => true, 'isRemoteEnabled' => 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)->withCustomFields();
$pdf = app('dompdf.wrapper');
$this->company = $this->settings = company();
$this->invoiceSetting = invoice_setting();
if ($this->contract->getCustomFieldGroupsWithFields()) {
$this->fields = $this->contract->getCustomFieldGroupsWithFields()->fields;
}
$pdf->setOption('enable_php', true);
$pdf->setOption('isHtml5ParserEnabled', true);
$pdf->setOption('isRemoteEnabled', 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;
$sign->date = Carbon::now()->format(company()->date_format);
$sign->place = $request->place;
$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));
Files::uploadLocalFile($imageName, 'contract/sign', $this->contract->company_id);
}
else {
if ($request->hasFile('image')) {
$imageName = Files::uploadLocalOrS3($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));
}
public function companySign(Request $request)
{
$contract = Contract::find($request->id);
$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));
Files::uploadLocalFile($imageName, 'contract/sign', $contract->company_id);
}
else {
if ($request->hasFile('image')) {
$imageName = Files::uploadLocalOrS3($request->image, 'contract/sign', 300);
}
}
$contract->company_sign = $imageName;
$contract->sign_date = Carbon::now();
$contract->update();
return Reply::successWithData(__('messages.signatureAdded'), ['status' => 'success' ]);
}
public function companiesSign(Request $request, $id)
{
$this->contract = Contract::find($id);
return view('contracts.companysign.sign', $this->data);
}
public function projectDetail($id)
{
if ($id != 0) {
$projects = Project::where('client_id', $id)->get();
}
else {
$projects = Project::all();
}
$options = BaseModel::options($projects, null, 'project_name');
return Reply::dataOnly(['status' => 'success', 'data' => $options]);
}
}