Merge branch 'master'

This commit is contained in:
Mohit Panjwani
2022-03-03 16:57:59 +05:30
13 changed files with 143 additions and 10 deletions

View File

@ -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,
]);
}
}

View File

@ -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,

View File

@ -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');
}
}

View File

@ -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');
}
}

View File

@ -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');
}
}

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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');
}

View File

@ -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;

View File

@ -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()
{
//
}
}

View File

@ -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' },
],
}),

View File

@ -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
//----------------------------------