mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-27 03:31:09 -04:00
Merge branch 'master'
This commit is contained in:
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace Crater\Http\Controllers\V1\Admin\Settings;
|
||||
|
||||
use Crater\Http\Controllers\Controller;
|
||||
use Crater\Models\Company;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CompanyCurrencyCheckTransactionsController extends Controller
|
||||
{
|
||||
/**
|
||||
* Handle the incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function __invoke(Request $request)
|
||||
{
|
||||
$company = Company::find($request->header('company'));
|
||||
|
||||
$this->authorize('manage company', $company);
|
||||
|
||||
if ($company->hasTransactions()) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
]);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@ -17,9 +17,20 @@ class UpdateCompanySettingsController extends Controller
|
||||
*/
|
||||
public function __invoke(UpdateSettingsRequest $request)
|
||||
{
|
||||
$this->authorize('manage company', Company::find($request->header('company')));
|
||||
$company = Company::find($request->header('company'));
|
||||
$this->authorize('manage company', $company);
|
||||
|
||||
CompanySetting::setSettings($request->settings, $request->header('company'));
|
||||
$companyCurrency = CompanySetting::getSetting('currency', $request->header('company'));
|
||||
$data = $request->settings;
|
||||
|
||||
if ($companyCurrency !== $data['currency'] && $company->hasTransactions()) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'You cannot change currency once transaction is created.'
|
||||
]);
|
||||
}
|
||||
|
||||
CompanySetting::setSettings($data, $request->header('company'));
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
|
||||
@ -4,6 +4,7 @@ namespace Crater\Http\Controllers\V1\PDF;
|
||||
|
||||
use Crater\Http\Controllers\Controller;
|
||||
use Crater\Models\Estimate;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class EstimatePdfController extends Controller
|
||||
{
|
||||
@ -13,8 +14,13 @@ class EstimatePdfController extends Controller
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function __invoke(Estimate $estimate)
|
||||
public function __invoke(Request $request, Estimate $estimate)
|
||||
{
|
||||
if ($request->has('preview')) {
|
||||
return $estimate->getPDFData();
|
||||
}
|
||||
|
||||
|
||||
return $estimate->getGeneratedPDFOrStream('estimate');
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ namespace Crater\Http\Controllers\V1\PDF;
|
||||
|
||||
use Crater\Http\Controllers\Controller;
|
||||
use Crater\Models\Invoice;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class InvoicePdfController extends Controller
|
||||
{
|
||||
@ -13,8 +14,12 @@ class InvoicePdfController extends Controller
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function __invoke(Invoice $invoice)
|
||||
public function __invoke(Request $request, Invoice $invoice)
|
||||
{
|
||||
if ($request->has('preview')) {
|
||||
return $invoice->getPDFData();
|
||||
}
|
||||
|
||||
return $invoice->getGeneratedPDFOrStream('invoice');
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ namespace Crater\Http\Controllers\V1\PDF;
|
||||
|
||||
use Crater\Http\Controllers\Controller;
|
||||
use Crater\Models\Payment;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class PaymentPdfController extends Controller
|
||||
{
|
||||
@ -13,8 +14,12 @@ class PaymentPdfController extends Controller
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function __invoke(Payment $payment)
|
||||
public function __invoke(Request $request, Payment $payment)
|
||||
{
|
||||
if ($request->has('preview')) {
|
||||
return view('app.pdf.payment.payment');
|
||||
}
|
||||
|
||||
return $payment->getGeneratedPDFOrStream('payment');
|
||||
}
|
||||
}
|
||||
|
||||
@ -380,4 +380,21 @@ class Company extends Model implements HasMedia
|
||||
$model->taxes()->delete();
|
||||
}
|
||||
}
|
||||
|
||||
public function hasTransactions()
|
||||
{
|
||||
if (
|
||||
$this->customers()->exists() ||
|
||||
$this->items()->exists() ||
|
||||
$this->invoices()->exists() ||
|
||||
$this->estimates()->exists() ||
|
||||
$this->expenses()->exists() ||
|
||||
$this->payments()->exists() ||
|
||||
$this->recurringInvoices()->exists()
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -412,6 +412,10 @@ class Estimate extends Model implements HasMedia
|
||||
'taxes' => $taxes,
|
||||
]);
|
||||
|
||||
if (request()->has('preview')) {
|
||||
return view('app.pdf.estimate.'.$estimateTemplate);
|
||||
}
|
||||
|
||||
return PDF::loadView('app.pdf.estimate.'.$estimateTemplate);
|
||||
}
|
||||
|
||||
|
||||
@ -575,6 +575,10 @@ class Invoice extends Model implements HasMedia
|
||||
'taxes' => $taxes,
|
||||
]);
|
||||
|
||||
if (request()->has('preview')) {
|
||||
return view('app.pdf.invoice.'.$invoiceTemplate);
|
||||
}
|
||||
|
||||
return PDF::loadView('app.pdf.invoice.'.$invoiceTemplate);
|
||||
}
|
||||
|
||||
|
||||
@ -375,6 +375,10 @@ class Payment extends Model implements HasMedia
|
||||
'logo' => $logo ?? null,
|
||||
]);
|
||||
|
||||
if (request()->has('preview')) {
|
||||
return view('app.pdf.payment.payment');
|
||||
}
|
||||
|
||||
return PDF::loadView('app.pdf.payment.payment');
|
||||
}
|
||||
|
||||
|
||||
@ -305,9 +305,15 @@ class RecurringInvoice extends Model
|
||||
->setCustomer($this->customer_id)
|
||||
->setNextNumbers();
|
||||
|
||||
$days = CompanySetting::getSetting('invoice_due_date_days', $this->company_id);
|
||||
|
||||
if (! $days || $days == "null") {
|
||||
$days = 7;
|
||||
}
|
||||
|
||||
$newInvoice['creator_id'] = $this->creator_id;
|
||||
$newInvoice['invoice_date'] = Carbon::today()->format('Y-m-d');
|
||||
$newInvoice['due_date'] = Carbon::today()->addDays(7)->format('Y-m-d');
|
||||
$newInvoice['due_date'] = Carbon::today()->addDays($days)->format('Y-m-d');
|
||||
$newInvoice['status'] = Invoice::STATUS_DRAFT;
|
||||
$newInvoice['company_id'] = $this->company_id;
|
||||
$newInvoice['paid_status'] = Invoice::STATUS_UNPAID;
|
||||
|
||||
@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
use Crater\Models\Invoice;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class ChangeOverDueStatusToSent extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
$overdueInvoices = Invoice::where('status', 'OVERDUE')->get();
|
||||
|
||||
if ($overdueInvoices) {
|
||||
$overdueInvoices->map(function ($overdueInvoice) {
|
||||
$overdueInvoice->status = Invoice::STATUS_SENT;
|
||||
$overdueInvoice->overdue = true;
|
||||
$overdueInvoice->save();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@ -40,12 +40,12 @@ export const useRecurringInvoiceStore = (useWindow = false) => {
|
||||
{ label: 'Every 30 Minute', value: '*/30 * * * *' },
|
||||
{ label: 'Every Hour', value: '0 * * * *' },
|
||||
{ label: 'Every 2 Hour', value: '0 */2 * * *' },
|
||||
{ label: 'Twice A Day', value: '0 13-15 * * *' },
|
||||
{ label: 'Every day at midnight ', value: '0 0 * * *' },
|
||||
{ label: 'Every Week', value: '0 0 * * 0' },
|
||||
{ label: 'Every 15 Days', value: '0 5 */15 * *' },
|
||||
{ label: 'First Day Of Month', value: '0 0 1 * *' },
|
||||
{ label: 'Every 15 days at midnight', value: '0 5 */15 * *' },
|
||||
{ label: 'On the first day of every month at 00:00', value: '0 0 1 * *' },
|
||||
{ label: 'Every 6 Month', value: '0 0 1 */6 *' },
|
||||
{ label: 'Every Year', value: '0 0 1 1 *' },
|
||||
{ label: 'Every year on the first day of january at 00:00', value: '0 0 1 1 *' },
|
||||
{ label: 'Custom', value: 'CUSTOM' },
|
||||
],
|
||||
}),
|
||||
|
||||
@ -67,6 +67,7 @@ use Crater\Http\Controllers\V1\Admin\RecurringInvoice\RecurringInvoiceFrequencyC
|
||||
use Crater\Http\Controllers\V1\Admin\Role\AbilitiesController;
|
||||
use Crater\Http\Controllers\V1\Admin\Role\RolesController;
|
||||
use Crater\Http\Controllers\V1\Admin\Settings\CompanyController;
|
||||
use Crater\Http\Controllers\V1\Admin\Settings\CompanyCurrencyCheckTransactionsController;
|
||||
use Crater\Http\Controllers\V1\Admin\Settings\DiskController;
|
||||
use Crater\Http\Controllers\V1\Admin\Settings\GetCompanyMailConfigurationController;
|
||||
use Crater\Http\Controllers\V1\Admin\Settings\GetCompanySettingsController;
|
||||
@ -394,6 +395,8 @@ Route::prefix('/v1')->group(function () {
|
||||
|
||||
Route::post('/settings', UpdateSettingsController::class);
|
||||
|
||||
Route::get('/company/has-transactions', CompanyCurrencyCheckTransactionsController::class);
|
||||
|
||||
|
||||
// Mails
|
||||
//----------------------------------
|
||||
|
||||
Reference in New Issue
Block a user