akaunting 3.0 (the last dance)

This commit is contained in:
Burak Civan
2022-06-01 10:15:55 +03:00
parent cead09f6d4
commit d9c0764572
3812 changed files with 126831 additions and 102949 deletions

View File

@ -5,7 +5,6 @@ namespace App\Http\Controllers\Modals;
use App\Abstracts\Http\Controller;
use App\Http\Requests\Banking\Account as Request;
use App\Jobs\Banking\CreateAccount;
use App\Models\Banking\Account;
use App\Models\Setting\Currency;
class Accounts extends Controller
@ -29,11 +28,9 @@ class Accounts extends Controller
*/
public function create()
{
$currencies = Currency::enabled()->pluck('name', 'code');
$currency = Currency::where('code', '=', setting('default.currency'))->first();
$html = view('modals.accounts.create', compact('currencies', 'currency'))->render();
$html = view('modals.accounts.create', compact('currency'))->render();
return response()->json([
'success' => true,

View File

@ -14,7 +14,7 @@ class Companies extends Controller
{
// Add CRUD permission check
$this->middleware('permission:read-settings-company')->only('index', 'show', 'edit', 'export');
$this->middleware('permission:update-settings-settings')->only('update', 'enable', 'disable');
$this->middleware('permission:update-settings-company')->only('update', 'enable', 'disable');
}
/**

View File

@ -7,7 +7,6 @@ use App\Http\Requests\Common\Contact as Request;
use App\Models\Common\Contact;
use App\Jobs\Common\CreateContact;
use App\Jobs\Common\UpdateContact;
use App\Models\Setting\Currency;
class Customers extends Controller
{
@ -30,17 +29,13 @@ class Customers extends Controller
*/
public function create()
{
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
$contact_selector = false;
if (request()->has('contact_selector')) {
$contact_selector = request()->get('contact_selector');
}
$rand = rand();
$html = view('modals.customers.create', compact('currencies', 'contact_selector', 'rand'))->render();
$html = view('modals.customers.create', compact('contact_selector'))->render();
return response()->json([
'success' => true,
@ -80,17 +75,13 @@ class Customers extends Controller
*/
public function edit(Contact $customer)
{
$currencies = Currency::enabled()->pluck('name', 'code');
$contact_selector = false;
if (request()->has('contact_selector')) {
$contact_selector = request()->get('contact_selector');
}
$rand = rand();
$html = view('modals.customers.edit', compact('customer', 'currencies', 'contact_selector', 'rand'))->render();
$html = view('modals.customers.edit', compact('customer', 'contact_selector'))->render();
return response()->json([
'success' => true,

View File

@ -15,8 +15,8 @@ class DocumentItemColumns extends Controller
public function __construct()
{
// Add CRUD permission check
$this->middleware('permission:read-settings-settings')->only('index', 'edit');
$this->middleware('permission:update-settings-settings')->only('update', 'enable', 'disable');
$this->middleware('permission:read-settings-invoice')->only('index', 'edit');
$this->middleware('permission:update-settings-invoice')->only('update', 'enable', 'disable');
}
/**
@ -31,6 +31,7 @@ class DocumentItemColumns extends Controller
$type = request()->get('type', 'invoice');
$item_names = [
'hide' => trans('settings.invoice.hide.item_name'),
'settings.invoice.item' => trans('settings.' . $type . '.item'),
'settings.invoice.product' => trans('settings.' . $type . '.product'),
'settings.invoice.service' => trans('settings.' . $type . '.service'),
@ -38,12 +39,14 @@ class DocumentItemColumns extends Controller
];
$price_names = [
'hide' => trans('settings.invoice.hide.price'),
'settings.invoice.price' => trans('settings.' . $type . '.price'),
'settings.invoice.rate' => trans('settings.' . $type . '.rate'),
'custom' => trans('settings.invoice.custom'),
];
$quantity_names = [
'hide' => trans('settings.invoice.hide.quantity'),
'settings.invoice.quantity' => trans('settings.' . $type . '.quantity'),
'custom' => trans('settings.invoice.custom'),
];

View File

@ -5,16 +5,18 @@ namespace App\Http\Controllers\Modals;
use App\Abstracts\Http\Controller;
use App\Http\Requests\Banking\Transaction as Request;
use App\Jobs\Banking\CreateBankingDocumentTransaction;
use App\Models\Banking\Account;
use App\Jobs\Banking\UpdateBankingDocumentTransaction;
use App\Models\Banking\Transaction;
use App\Models\Document\Document;
use App\Models\Setting\Currency;
use App\Utilities\Modules;
use App\Traits\Uploads;
use App\Traits\Transactions;
class DocumentTransactions extends Controller
{
use Uploads;
use Uploads, Transactions;
/**
* Instantiate a new controller instance.
@ -37,16 +39,12 @@ class DocumentTransactions extends Controller
*/
public function create(Document $document)
{
$accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
$currency = Currency::where('code', $document->currency_code)->first();
$payment_methods = Modules::getPaymentMethods();
$paid = $document->paid;
$number = $this->getNextTransactionNumber();
// Get document Totals
foreach ($document->totals as $document_total) {
$document->{$document_total->code} = $document_total->amount;
@ -56,11 +54,29 @@ class DocumentTransactions extends Controller
$document->grand_total = money($total, $currency->code)->getAmount();
if (!empty($paid)) {
if (! empty($paid)) {
$document->grand_total = round($document->total - $paid, $currency->precision);
}
$html = view('modals.documents.payment', compact('document', 'accounts', 'currencies', 'currency', 'payment_methods'))->render();
$buttons = [
'cancel' => [
'text' => trans('general.cancel'),
'class' => 'btn-outline-secondary'
],
'payment' => [
'text' => trans('invoices.accept_payments'),
'class' => 'long-texts',
'url' => route('apps.categories.show', 'payment-method')
],
'confirm' => [
'text' => trans('general.save'),
'class' => 'disabled:bg-green-100'
],
];
$route = ['modals.documents.document.transactions.store', $document->id];
$html = view('modals.documents.payment', compact('document', 'route', 'currency', 'number'))->render();
return response()->json([
'success' => true,
@ -69,21 +85,7 @@ class DocumentTransactions extends Controller
'html' => $html,
'data' => [
'title' => trans('general.title.new', ['type' => trans_choice('general.payments', 1)]),
'buttons' => [
'cancel' => [
'text' => trans('general.cancel'),
'class' => 'btn-outline-secondary'
],
'payment' => [
'text' => trans('invoices.accept_payments'),
'class' => 'long-texts',
'url' => route('apps.categories.show', 'payment-method')
],
'confirm' => [
'text' => trans('general.save'),
'class' => 'btn-success'
]
]
'buttons' => $buttons,
]
]);
}
@ -101,9 +103,99 @@ class DocumentTransactions extends Controller
$response = $this->ajaxDispatch(new CreateBankingDocumentTransaction($document, $request));
if ($response['success']) {
$route = config('type.' . $document->type . '.route.prefix');
$route = config('type.document.' . $document->type . '.route.prefix');
if ($alias = config('type.' . $document->type . '.alias')) {
if ($alias = config('type.document.' . $document->type . '.alias')) {
$route = $alias . '.' . $route;
}
$response['redirect'] = route($route . '.show', $document->id);
$message = trans('messages.success.added', ['type' => trans_choice('general.payments', 1)]);
flash($message)->success();
} else {
$response['redirect'] = null;
}
return response()->json($response);
}
/**
* Show the form for creating a new resource.
*
* @param Document $document
*
* @return Response
*/
public function edit(Document $document, Transaction $transaction)
{
$currency = Currency::where('code', $document->currency_code)->first();
$paid = $document->paid;
$number = $this->getNextTransactionNumber();
// Get document Totals
foreach ($document->totals as $document_total) {
$document->{$document_total->code} = $document_total->amount;
}
$total = money($document->total, $currency->code, true)->format();
$document->grand_total = money($total, $currency->code)->getAmount();
if (! empty($paid)) {
$document->grand_total = round($document->total - $paid, $currency->precision);
}
$buttons = [
'cancel' => [
'text' => trans('general.cancel'),
'class' => 'btn-outline-secondary'
],
'payment' => [
'text' => trans('invoices.accept_payments'),
'class' => 'long-texts',
'url' => route('apps.categories.show', 'payment-method')
],
'confirm' => [
'text' => trans('general.save'),
'class' => 'disabled:bg-green-100'
],
];
$route = ['modals.documents.document.transactions.update', $document->id, $transaction->id];
$html = view('modals.documents.payment', compact('document', 'transaction', 'route', 'currency', 'number'))->render();
return response()->json([
'success' => true,
'error' => false,
'message' => 'null',
'html' => $html,
'data' => [
'title' => trans('general.title.edit', ['type' => trans_choice('general.payments', 1)]),
'buttons' => $buttons,
]
]);
}
/**
* Update the specified resource in storage.
*
* @param $item
* @param $request
* @return Response
*/
public function update(Document $document, Transaction $transaction, Request $request)
{
$response = $this->ajaxDispatch(new UpdateBankingDocumentTransaction($document, $transaction, $request));
if ($response['success']) {
$route = config('type.document.' . $document->type . '.route.prefix');
if ($alias = config('type.document.' . $document->type . '.alias')) {
$route = $alias . '.' . $route;
}

View File

@ -0,0 +1,92 @@
<?php
namespace App\Http\Controllers\Modals;
use App\Abstracts\Http\Controller;
use App\Models\Document\Document;
use App\Notifications\Sale\Invoice as Notification;
use App\Jobs\Document\SendDocumentAsCustomMail;
use App\Http\Requests\Common\CustomMail as Request;
class InvoiceEmails extends Controller
{
/**
* Instantiate a new controller instance.
*/
public function __construct()
{
// Add CRUD permission check
$this->middleware('permission:create-sales-invoices')->only('create', 'store', 'duplicate', 'import');
$this->middleware('permission:read-sales-invoices')->only('index', 'show', 'edit', 'export');
$this->middleware('permission:update-sales-invoices')->only('update', 'enable', 'disable');
$this->middleware('permission:delete-sales-invoices')->only('destroy');
}
/**
* Show the form for creating a new resource.
*
* @param Document $invoice
*
* @return Response
*/
public function create(Document $invoice)
{
$notification = new Notification($invoice, 'invoice_new_customer', true);
$store_route = 'modals.invoices.emails.store';
$html = view('modals.invoices.email', compact('invoice', 'notification', 'store_route'))->render();
return response()->json([
'success' => true,
'error' => false,
'message' => 'null',
'html' => $html,
'data' => [
'title' => trans('general.title.new', ['type' => trans_choice('general.email', 1)]),
'buttons' => [
'cancel' => [
'text' => trans('general.cancel'),
'class' => 'btn-outline-secondary',
],
'confirm' => [
'text' => trans('general.send'),
'class' => 'disabled:bg-green-100',
]
]
]
]);
}
/**
* Store a newly created resource in storage.
*
* @param Request $request
*
* @return Response
*/
public function store(Request $request)
{
$response = $this->ajaxDispatch(new SendDocumentAsCustomMail($request, 'invoice_new_customer'));
if ($response['success']) {
$invoice = Document::find($request->get('document_id'));
$route = config('type.document.' . $invoice->type . '.route.prefix');
if ($alias = config('type.document.' . $invoice->type . '.alias')) {
$route = $alias . '.' . $route;
}
$response['redirect'] = route($route . '.show', $invoice->id);
$message = trans('documents.messages.email_sent', ['type' => trans_choice('general.invoices', 1)]);
flash($message)->success();
} else {
$response['redirect'] = null;
}
return response()->json($response);
}
}

View File

@ -0,0 +1,81 @@
<?php
namespace App\Http\Controllers\Modals;
use App\Abstracts\Http\Controller;
use App\Models\Document\Document;
use Illuminate\Support\Facades\URL;
class InvoiceShare extends Controller
{
/**
* Instantiate a new controller instance.
*/
public function __construct()
{
// Add CRUD permission check
$this->middleware('permission:create-sales-invoices')->only('create', 'store', 'duplicate', 'import');
$this->middleware('permission:read-sales-invoices')->only('index', 'show', 'edit', 'export');
$this->middleware('permission:update-sales-invoices')->only('update', 'enable', 'disable');
$this->middleware('permission:delete-sales-invoices')->only('destroy');
}
/**
* Show the form for creating a new resource.
*
* @param Document $invoice
*
* @return Response
*/
public function create(Document $invoice)
{
$page = config('type.document.' . $invoice->type . '.route.prefix');
$alias = config('type.document.' . $invoice->type . '.alias');
$route = '';
if (! empty($alias)) {
$route .= $alias . '.';
}
$preview_route = $route . 'preview.' . $page . '.show';
$signed_route = $route . 'signed.' . $page . '.show';
try {
$previewUrl = route($preview_route, $invoice->id);
} catch (\Exception $e) {
$previewUrl = '';
}
try {
route($signed_route, [$this->document->id, 'company_id' => company_id()]);
$signedUrl = URL::signedRoute($signed_route, [$invoice->id]);
} catch (\Exception $e) {
$signedUrl = URL::signedRoute('signed.invoices.show', [$invoice->id]);
}
$html = view('modals.invoices.share', compact('invoice', 'previewUrl', 'signedUrl'))->render();
return response()->json([
'success' => true,
'error' => false,
'message' => 'null',
'html' => $html,
'data' => [
'title' => trans('general.title.new', ['type' => trans('general.share_link')]),
'success_message' => trans('invoices.share.success_message'),
'buttons' => [
'cancel' => [
'text' => trans('general.cancel'),
'class' => 'btn-outline-secondary',
],
'confirm' => [
'text' => trans('general.copy_link'),
'class' => 'disabled:bg-green-100',
],
]
]
]);
}
}

View File

@ -12,10 +12,10 @@ class InvoiceTemplates extends Controller
public function __construct()
{
// Add CRUD permission check
$this->middleware('permission:create-settings-settings')->only('create', 'store');
$this->middleware('permission:read-settings-settings')->only('index', 'edit');
$this->middleware('permission:update-settings-settings')->only('update', 'enable', 'disable');
$this->middleware('permission:delete-settings-settings')->only('destroy');
$this->middleware('permission:create-settings-invoice')->only('create', 'store');
$this->middleware('permission:read-settings-invoice')->only('index', 'edit');
$this->middleware('permission:update-settings-invoice')->only('update', 'enable', 'disable');
$this->middleware('permission:delete-settings-invoice')->only('destroy');
}
/**

View File

@ -4,7 +4,6 @@ namespace App\Http\Controllers\Modals;
use App\Abstracts\Http\Controller;
use App\Jobs\Common\CreateItem;
use App\Models\Setting\Category;
use App\Models\Setting\Currency;
use App\Models\Setting\Tax;
use Illuminate\Http\Request as IRequest;
@ -30,13 +29,11 @@ class Items extends Controller
*/
public function create(IRequest $request)
{
$categories = Category::item()->enabled()->orderBy('name')->take(setting('default.select_limit'))->pluck('name', 'id');
$taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id');
$currency = Currency::where('code', setting('default.currency'))->first();
$html = view('modals.items.create', compact('categories', 'taxes', 'currency'))->render();
$html = view('modals.items.create', compact('taxes', 'currency'))->render();
return response()->json([
'success' => true,

View File

@ -0,0 +1,96 @@
<?php
namespace App\Http\Controllers\Modals;
use App\Abstracts\Http\Controller;
use App\Models\Banking\Transaction;
use App\Notifications\Banking\Transaction as Notification;
use App\Jobs\Banking\SendTransactionAsCustomMail;
use App\Http\Requests\Common\CustomMail as Request;
class TransactionEmails extends Controller
{
/**
* Instantiate a new controller instance.
*/
public function __construct()
{
// Add CRUD permission check
$this->middleware('permission:create-banking-transactions')->only('create', 'store', 'duplicate', 'import');
$this->middleware('permission:read-banking-transactions')->only('index', 'show', 'edit', 'export');
$this->middleware('permission:update-banking-transactions')->only('update', 'enable', 'disable');
$this->middleware('permission:delete-banking-transactions')->only('destroy');
}
/**
* Show the form for creating a new resource.
*
* @param Transaction $transaction
*
* @return Response
*/
public function create(Transaction $transaction)
{
$email_template = config('type.transaction.' . $transaction->type . '.email_template');
$notification = new Notification($transaction, $email_template, true);
$store_route = 'modals.transactions.emails.store';
$html = view('modals.transactions.email', compact('transaction', 'notification', 'store_route'))->render();
return response()->json([
'success' => true,
'error' => false,
'message' => 'null',
'html' => $html,
'data' => [
'title' => trans('general.title.new', ['type' => trans_choice('general.email', 1)]),
'buttons' => [
'cancel' => [
'text' => trans('general.cancel'),
'class' => 'btn-outline-secondary',
],
'confirm' => [
'text' => trans('general.send'),
'class' => 'disabled:bg-green-100',
]
]
]
]);
}
/**
* Store a newly created resource in storage.
*
* @param Request $request
*
* @return Response
*/
public function store(Request $request)
{
$transaction = Transaction::find($request->get('transaction_id'));
$email_template = config('type.transaction.' . $transaction->type . '.email_template');
$response = $this->ajaxDispatch(new SendTransactionAsCustomMail($request, $email_template));
if ($response['success']) {
$route = config('type.transaction.' . $transaction->type . '.route.prefix');
if ($alias = config('type.transaction.' . $transaction->type . '.alias')) {
$route = $alias . '.' . $route;
}
$response['redirect'] = route($route . '.show', $transaction->id);
$message = trans('documents.messages.email_sent', ['type' => trans_choice('general.transactions', 1)]);
flash($message)->success();
} else {
$response['redirect'] = null;
}
return response()->json($response);
}
}

View File

@ -0,0 +1,80 @@
<?php
namespace App\Http\Controllers\Modals;
use App\Abstracts\Http\Controller;
use App\Models\Banking\Transaction;
use Illuminate\Support\Facades\URL;
class TransactionShare extends Controller
{
/**
* Instantiate a new controller instance.
*/
public function __construct()
{
// Add CRUD permission check
$this->middleware('permission:create-banking-transactions')->only('create', 'store', 'duplicate', 'import');
$this->middleware('permission:read-banking-transactions')->only('index', 'show', 'edit', 'export');
$this->middleware('permission:update-banking-transactions')->only('update', 'enable', 'disable');
$this->middleware('permission:delete-banking-transactions')->only('destroy');
}
/**
* Show the form for creating a new resource.
*
* @param Transaction $transaction
*
* @return Response
*/
public function create(Transaction $transaction)
{
$alias = config('type.transaction.' . $transaction->type . '.alias');
$route = '';
if (! empty($alias)) {
$route .= $alias . '.';
}
$preview_route = $route . 'preview.payments.show';
$signed_route = $route . 'signed.payments.show';
try {
$previewUrl = route($preview_route, $transaction->id);
} catch (\Exception $e) {
$previewUrl = '';
}
try {
route($signed_route, [$this->document->id, 'company_id' => company_id()]);
$signedUrl = URL::signedRoute($signed_route, [$transaction->id]);
} catch (\Exception $e) {
$signedUrl = URL::signedRoute('signed.payments.show', [$transaction->id]);
}
$html = view('modals.transactions.share', compact('transaction', 'previewUrl', 'signedUrl'))->render();
return response()->json([
'success' => true,
'error' => false,
'message' => 'null',
'html' => $html,
'data' => [
'title' => trans('general.title.new', ['type' => trans('general.share_link')]),
'success_message' => trans('invoices.share.success_message'),
'buttons' => [
'cancel' => [
'text' => trans('general.cancel'),
'class' => 'btn-outline-secondary',
],
'confirm' => [
'text' => trans('general.copy_link'),
'class' => 'disabled:bg-green-100',
],
]
]
]);
}
}

View File

@ -12,10 +12,10 @@ class TransferTemplates extends Controller
public function __construct()
{
// Add CRUD permission check
$this->middleware('permission:create-settings-settings')->only('create', 'store');
$this->middleware('permission:read-settings-settings')->only('index', 'edit');
$this->middleware('permission:update-settings-settings')->only('update', 'enable', 'disable');
$this->middleware('permission:delete-settings-settings')->only('destroy');
$this->middleware('permission:create-banking-transfers')->only('create', 'store');
$this->middleware('permission:read-banking-transfers')->only('index', 'edit');
$this->middleware('permission:update-banking-transfers')->only('update', 'enable', 'disable');
$this->middleware('permission:delete-banking-transfers')->only('destroy');
}
/**

View File

@ -7,7 +7,6 @@ use App\Http\Requests\Common\Contact as Request;
use App\Models\Common\Contact;
use App\Jobs\Common\CreateContact;
use App\Jobs\Common\UpdateContact;
use App\Models\Setting\Currency;
class Vendors extends Controller
{
@ -30,17 +29,13 @@ class Vendors extends Controller
*/
public function create()
{
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
$contact_selector = false;
if (request()->has('contact_selector')) {
$contact_selector = request()->get('contact_selector');
}
$rand = rand();
$html = view('modals.vendors.create', compact('currencies', 'contact_selector', 'rand'))->render();
$html = view('modals.vendors.create', compact('contact_selector'))->render();
return response()->json([
'success' => true,
@ -79,17 +74,13 @@ class Vendors extends Controller
*/
public function edit(Contact $vendor)
{
$currencies = Currency::enabled()->pluck('name', 'code');
$contact_selector = false;
if (request()->has('contact_selector')) {
$contact_selector = request()->get('contact_selector');
}
$rand = rand();
$html = view('modals.vendors.edit', compact('vendor', 'currencies', 'contact_selector', 'rand'))->render();
$html = view('modals.vendors.edit', compact('vendor','contact_selector'))->render();
return response()->json([
'success' => true,