mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-11-02 21:43:18 -05:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			dependabot
			...
			dom-pdf
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ddbcad274f | 
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -14,6 +14,3 @@ Homestead.yaml
 | 
			
		||||
/.vscode
 | 
			
		||||
/docker-compose/db/data/
 | 
			
		||||
.gitkeep
 | 
			
		||||
/public/docs
 | 
			
		||||
/.scribe
 | 
			
		||||
!storage/fonts/.gitkeep
 | 
			
		||||
@ -40,13 +40,10 @@ class CheckInvoiceStatus extends Command
 | 
			
		||||
    public function handle()
 | 
			
		||||
    {
 | 
			
		||||
        $date = Carbon::now();
 | 
			
		||||
        $invoices = Invoice::whereNotIn('status', [Invoice::STATUS_COMPLETED, Invoice::STATUS_DRAFT])
 | 
			
		||||
            ->where('overdue', false)
 | 
			
		||||
            ->whereDate('due_date', '<', $date)
 | 
			
		||||
            ->get();
 | 
			
		||||
        $invoices = Invoice::where('status', '<>', Invoice::STATUS_COMPLETED)->whereDate('due_date', '<', $date)->get();
 | 
			
		||||
 | 
			
		||||
        foreach ($invoices as $invoice) {
 | 
			
		||||
            $invoice->overdue = true;
 | 
			
		||||
            $invoice->status = Invoice::STATUS_OVERDUE;
 | 
			
		||||
            printf("Invoice %s is OVERDUE \n", $invoice->invoice_number);
 | 
			
		||||
            $invoice->save();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,6 @@
 | 
			
		||||
 | 
			
		||||
namespace Crater\Console;
 | 
			
		||||
 | 
			
		||||
use Crater\Models\CompanySetting;
 | 
			
		||||
use Crater\Models\RecurringInvoice;
 | 
			
		||||
use Illuminate\Console\Scheduling\Schedule;
 | 
			
		||||
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
 | 
			
		||||
@ -38,11 +37,9 @@ class Kernel extends ConsoleKernel
 | 
			
		||||
 | 
			
		||||
            $recurringInvoices = RecurringInvoice::where('status', 'ACTIVE')->get();
 | 
			
		||||
            foreach ($recurringInvoices as $recurringInvoice) {
 | 
			
		||||
                $timeZone = CompanySetting::getSetting('time_zone', $recurringInvoice->company_id);
 | 
			
		||||
 | 
			
		||||
                $schedule->call(function () use ($recurringInvoice) {
 | 
			
		||||
                    $recurringInvoice->generateInvoice();
 | 
			
		||||
                })->cron($recurringInvoice->frequency)->timezone($timeZone);
 | 
			
		||||
                })->cron($recurringInvoice->frequency);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -12,7 +12,6 @@ use Crater\Models\Expense;
 | 
			
		||||
use Crater\Models\Invoice;
 | 
			
		||||
use Crater\Models\Payment;
 | 
			
		||||
use Illuminate\Http\Request;
 | 
			
		||||
use Silber\Bouncer\BouncerFacade;
 | 
			
		||||
 | 
			
		||||
class DashboardController extends Controller
 | 
			
		||||
{
 | 
			
		||||
@ -152,8 +151,8 @@ class DashboardController extends Controller
 | 
			
		||||
            'total_invoice_count' => $total_invoice_count,
 | 
			
		||||
            'total_estimate_count' => $total_estimate_count,
 | 
			
		||||
 | 
			
		||||
            'recent_due_invoices' => BouncerFacade::can('view-invoice', Invoice::class) ? $recent_due_invoices : [],
 | 
			
		||||
            'recent_estimates' => BouncerFacade::can('view-estimate', Estimate::class) ? $recent_estimates : [],
 | 
			
		||||
            'recent_due_invoices' => $recent_due_invoices,
 | 
			
		||||
            'recent_estimates' => $recent_estimates,
 | 
			
		||||
 | 
			
		||||
            'chart_data' => $chart_data,
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,7 @@
 | 
			
		||||
namespace Crater\Http\Controllers\V1\Admin\Expense;
 | 
			
		||||
 | 
			
		||||
use Crater\Http\Controllers\Controller;
 | 
			
		||||
use Crater\Http\Requests\UploadExpenseReceiptRequest;
 | 
			
		||||
use Crater\Http\Requests\ExpenseRequest;
 | 
			
		||||
use Crater\Models\Expense;
 | 
			
		||||
 | 
			
		||||
class UploadReceiptController extends Controller
 | 
			
		||||
@ -15,7 +15,7 @@ class UploadReceiptController extends Controller
 | 
			
		||||
     * @param  Expense $expense
 | 
			
		||||
     * @return \Illuminate\Http\JsonResponse
 | 
			
		||||
     */
 | 
			
		||||
    public function __invoke(UploadExpenseReceiptRequest $request, Expense $expense)
 | 
			
		||||
    public function __invoke(ExpenseRequest $request, Expense $expense)
 | 
			
		||||
    {
 | 
			
		||||
        $this->authorize('update', $expense);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -49,16 +49,7 @@ class BootstrapController extends Controller
 | 
			
		||||
 | 
			
		||||
        BouncerFacade::refreshFor($current_user);
 | 
			
		||||
 | 
			
		||||
        $global_settings = Setting::getSettings([
 | 
			
		||||
            'api_token',
 | 
			
		||||
            'admin_portal_theme',
 | 
			
		||||
            'admin_portal_logo',
 | 
			
		||||
            'login_page_logo',
 | 
			
		||||
            'login_page_heading',
 | 
			
		||||
            'login_page_description',
 | 
			
		||||
            'admin_page_title',
 | 
			
		||||
            'copyright_text'
 | 
			
		||||
        ]);
 | 
			
		||||
        $global_settings = Setting::getSettings(['api_token', 'admin_portal_theme']);
 | 
			
		||||
 | 
			
		||||
        return response()->json([
 | 
			
		||||
            'current_user' => new UserResource($current_user),
 | 
			
		||||
 | 
			
		||||
@ -102,7 +102,7 @@ class InvoicesController extends Controller
 | 
			
		||||
    {
 | 
			
		||||
        $this->authorize('delete multiple invoices');
 | 
			
		||||
 | 
			
		||||
        Invoice::deleteInvoices($request->ids);
 | 
			
		||||
        Invoice::destroy($request->ids);
 | 
			
		||||
 | 
			
		||||
        return response()->json([
 | 
			
		||||
            'success' => true,
 | 
			
		||||
 | 
			
		||||
@ -3,18 +3,18 @@
 | 
			
		||||
namespace Crater\Http\Controllers\V1\Admin\Modules;
 | 
			
		||||
 | 
			
		||||
use Crater\Http\Controllers\Controller;
 | 
			
		||||
use Crater\Http\Requests\UnzipUpdateRequest;
 | 
			
		||||
use Crater\Space\ModuleInstaller;
 | 
			
		||||
use Illuminate\Http\Request;
 | 
			
		||||
 | 
			
		||||
class UnzipModuleController extends Controller
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Handle the incoming request.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  \Crater\Http\Requests\UnzipUpdateRequest  $request
 | 
			
		||||
     * @param  \Illuminate\Http\Request  $request
 | 
			
		||||
     * @return \Illuminate\Http\Response
 | 
			
		||||
     */
 | 
			
		||||
    public function __invoke(UnzipUpdateRequest $request)
 | 
			
		||||
    public function __invoke(Request $request)
 | 
			
		||||
    {
 | 
			
		||||
        $this->authorize('manage modules');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -3,18 +3,18 @@
 | 
			
		||||
namespace Crater\Http\Controllers\V1\Admin\Modules;
 | 
			
		||||
 | 
			
		||||
use Crater\Http\Controllers\Controller;
 | 
			
		||||
use Crater\Http\Requests\UploadModuleRequest;
 | 
			
		||||
use Crater\Space\ModuleInstaller;
 | 
			
		||||
use Illuminate\Http\Request;
 | 
			
		||||
 | 
			
		||||
class UploadModuleController extends Controller
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Handle the incoming request.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  \Crater\Http\Requests\UploadModuleRequest  $request
 | 
			
		||||
     * @param  \Illuminate\Http\Request  $request
 | 
			
		||||
     * @return \Illuminate\Http\Response
 | 
			
		||||
     */
 | 
			
		||||
    public function __invoke(UploadModuleRequest $request)
 | 
			
		||||
    public function __invoke(Request $request)
 | 
			
		||||
    {
 | 
			
		||||
        $this->authorize('manage modules');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -84,12 +84,10 @@ class PaymentMethodsController extends Controller
 | 
			
		||||
    {
 | 
			
		||||
        $this->authorize('delete', $paymentMethod);
 | 
			
		||||
 | 
			
		||||
        if ($paymentMethod->payments()->exists()) {
 | 
			
		||||
            return respondJson('payments_attached', 'Payments Attached.');
 | 
			
		||||
        }
 | 
			
		||||
        $payments = $paymentMethod->payments;
 | 
			
		||||
 | 
			
		||||
        if ($paymentMethod->expenses()->exists()) {
 | 
			
		||||
            return respondJson('expenses_attached', 'Expenses Attached.');
 | 
			
		||||
        if ($payments->count() > 0) {
 | 
			
		||||
            return respondJson('payments_attached', 'Payments Attached.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $paymentMethod->delete();
 | 
			
		||||
 | 
			
		||||
@ -71,9 +71,6 @@ class CompanyController extends Controller
 | 
			
		||||
 | 
			
		||||
        $data = json_decode($request->company_logo);
 | 
			
		||||
 | 
			
		||||
        if (isset($request->is_company_logo_removed) && (bool) $request->is_company_logo_removed) {
 | 
			
		||||
            $company->clearMediaCollection('logo');
 | 
			
		||||
        }
 | 
			
		||||
        if ($data) {
 | 
			
		||||
            $company = Company::find($request->header('company'));
 | 
			
		||||
 | 
			
		||||
@ -101,9 +98,6 @@ class CompanyController extends Controller
 | 
			
		||||
    {
 | 
			
		||||
        $user = auth()->user();
 | 
			
		||||
 | 
			
		||||
        if (isset($request->is_admin_avatar_removed) && (bool) $request->is_admin_avatar_removed) {
 | 
			
		||||
            $user->clearMediaCollection('admin_avatar');
 | 
			
		||||
        }
 | 
			
		||||
        if ($user && $request->hasFile('admin_avatar')) {
 | 
			
		||||
            $user->clearMediaCollection('admin_avatar');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,27 +0,0 @@
 | 
			
		||||
<?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);
 | 
			
		||||
 | 
			
		||||
        return response()->json([
 | 
			
		||||
            'has_transactions' => $company->hasTransactions(),
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -6,7 +6,6 @@ use Crater\Http\Controllers\Controller;
 | 
			
		||||
use Crater\Http\Requests\UpdateSettingsRequest;
 | 
			
		||||
use Crater\Models\Company;
 | 
			
		||||
use Crater\Models\CompanySetting;
 | 
			
		||||
use Illuminate\Support\Arr;
 | 
			
		||||
 | 
			
		||||
class UpdateCompanySettingsController extends Controller
 | 
			
		||||
{
 | 
			
		||||
@ -18,23 +17,9 @@ class UpdateCompanySettingsController extends Controller
 | 
			
		||||
     */
 | 
			
		||||
    public function __invoke(UpdateSettingsRequest $request)
 | 
			
		||||
    {
 | 
			
		||||
        $company = Company::find($request->header('company'));
 | 
			
		||||
        $this->authorize('manage company', $company);
 | 
			
		||||
        $this->authorize('manage company', Company::find($request->header('company')));
 | 
			
		||||
 | 
			
		||||
        $data = $request->settings;
 | 
			
		||||
 | 
			
		||||
        if (
 | 
			
		||||
            Arr::exists($data, 'currency') &&
 | 
			
		||||
            (CompanySetting::getSetting('currency', $company->id) !== $data['currency']) &&
 | 
			
		||||
            $company->hasTransactions()
 | 
			
		||||
        ) {
 | 
			
		||||
            return response()->json([
 | 
			
		||||
                'success' => false,
 | 
			
		||||
                'message' => 'Cannot update company currency after transactions are created.'
 | 
			
		||||
            ]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        CompanySetting::setSettings($data, $request->header('company'));
 | 
			
		||||
        CompanySetting::setSettings($request->settings, $request->header('company'));
 | 
			
		||||
 | 
			
		||||
        return response()->json([
 | 
			
		||||
            'success' => true,
 | 
			
		||||
 | 
			
		||||
@ -17,9 +17,6 @@ class ProfileController extends Controller
 | 
			
		||||
 | 
			
		||||
        $customer->update($request->validated());
 | 
			
		||||
 | 
			
		||||
        if (isset($request->is_customer_avatar_removed) && (bool) $request->is_customer_avatar_removed) {
 | 
			
		||||
            $customer->clearMediaCollection('customer_avatar');
 | 
			
		||||
        }
 | 
			
		||||
        if ($customer && $request->hasFile('customer_avatar')) {
 | 
			
		||||
            $customer->clearMediaCollection('customer_avatar');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -44,8 +44,8 @@ class InvoicePdfController extends Controller
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return view('app')->with([
 | 
			
		||||
                'customer_logo' => get_company_setting('customer_portal_logo', $invoice->company_id),
 | 
			
		||||
                'current_theme' => get_company_setting('customer_portal_theme', $invoice->company_id)
 | 
			
		||||
                'customer_logo' => get_customer_logo($invoice->company_id),
 | 
			
		||||
                'current_theme' => get_customer_portal_theme($invoice->company_id)
 | 
			
		||||
            ]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,8 +17,6 @@ class DownloadReceiptController extends Controller
 | 
			
		||||
     */
 | 
			
		||||
    public function __invoke(Expense $expense)
 | 
			
		||||
    {
 | 
			
		||||
        $this->authorize('view', $expense);
 | 
			
		||||
 | 
			
		||||
        if ($expense) {
 | 
			
		||||
            $media = $expense->getFirstMedia('receipts');
 | 
			
		||||
            if ($media) {
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,6 @@ namespace Crater\Http\Controllers\V1\PDF;
 | 
			
		||||
 | 
			
		||||
use Crater\Http\Controllers\Controller;
 | 
			
		||||
use Crater\Models\Estimate;
 | 
			
		||||
use Illuminate\Http\Request;
 | 
			
		||||
 | 
			
		||||
class EstimatePdfController extends Controller
 | 
			
		||||
{
 | 
			
		||||
@ -14,13 +13,8 @@ class EstimatePdfController extends Controller
 | 
			
		||||
     * @param  \Illuminate\Http\Request  $request
 | 
			
		||||
     * @return \Illuminate\Http\Response
 | 
			
		||||
     */
 | 
			
		||||
    public function __invoke(Request $request, Estimate $estimate)
 | 
			
		||||
    public function __invoke(Estimate $estimate)
 | 
			
		||||
    {
 | 
			
		||||
        if ($request->has('preview')) {
 | 
			
		||||
            return $estimate->getPDFData();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        return $estimate->getGeneratedPDFOrStream('estimate');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,6 @@ namespace Crater\Http\Controllers\V1\PDF;
 | 
			
		||||
 | 
			
		||||
use Crater\Http\Controllers\Controller;
 | 
			
		||||
use Crater\Models\Invoice;
 | 
			
		||||
use Illuminate\Http\Request;
 | 
			
		||||
 | 
			
		||||
class InvoicePdfController extends Controller
 | 
			
		||||
{
 | 
			
		||||
@ -14,12 +13,8 @@ class InvoicePdfController extends Controller
 | 
			
		||||
     * @param  \Illuminate\Http\Request  $request
 | 
			
		||||
     * @return \Illuminate\Http\Response
 | 
			
		||||
     */
 | 
			
		||||
    public function __invoke(Request $request, Invoice $invoice)
 | 
			
		||||
    public function __invoke(Invoice $invoice)
 | 
			
		||||
    {
 | 
			
		||||
        if ($request->has('preview')) {
 | 
			
		||||
            return $invoice->getPDFData();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $invoice->getGeneratedPDFOrStream('invoice');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,6 @@ namespace Crater\Http\Controllers\V1\PDF;
 | 
			
		||||
 | 
			
		||||
use Crater\Http\Controllers\Controller;
 | 
			
		||||
use Crater\Models\Payment;
 | 
			
		||||
use Illuminate\Http\Request;
 | 
			
		||||
 | 
			
		||||
class PaymentPdfController extends Controller
 | 
			
		||||
{
 | 
			
		||||
@ -14,12 +13,8 @@ class PaymentPdfController extends Controller
 | 
			
		||||
     * @param  \Illuminate\Http\Request  $request
 | 
			
		||||
     * @return \Illuminate\Http\Response
 | 
			
		||||
     */
 | 
			
		||||
    public function __invoke(Request $request, Payment $payment)
 | 
			
		||||
    public function __invoke(Payment $payment)
 | 
			
		||||
    {
 | 
			
		||||
        if ($request->has('preview')) {
 | 
			
		||||
            return view('app.pdf.payment.payment');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $payment->getGeneratedPDFOrStream('payment');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,7 @@
 | 
			
		||||
namespace Crater\Http\Middleware;
 | 
			
		||||
 | 
			
		||||
use Closure;
 | 
			
		||||
use Crater\Models\CompanySetting;
 | 
			
		||||
use Crater\Models\FileDisk;
 | 
			
		||||
 | 
			
		||||
class ConfigMiddleware
 | 
			
		||||
@ -17,6 +18,15 @@ class ConfigMiddleware
 | 
			
		||||
    public function handle($request, Closure $next)
 | 
			
		||||
    {
 | 
			
		||||
        if (\Storage::disk('local')->has('database_created')) {
 | 
			
		||||
            $setting = CompanySetting::getSetting('time_zone', $request->header('company'));
 | 
			
		||||
 | 
			
		||||
            $timezone = config('app.timezone');
 | 
			
		||||
 | 
			
		||||
            if ($setting && $setting != null && $setting != $timezone) {
 | 
			
		||||
                config(['app.timezone' => $setting]);
 | 
			
		||||
                date_default_timezone_set($setting);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ($request->has('file_disk_id')) {
 | 
			
		||||
                $file_disk = FileDisk::find($request->file_disk_id);
 | 
			
		||||
            } else {
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ class PdfMiddleware
 | 
			
		||||
     */
 | 
			
		||||
    public function handle(Request $request, Closure $next)
 | 
			
		||||
    {
 | 
			
		||||
        if (Auth::guard('web')->check() || Auth::guard('sanctum')->check() || Auth::guard('customer')->check()) {
 | 
			
		||||
        if (Auth::guard('web')->check() || Auth::guard('api')->check() || Auth::guard('customer')->check()) {
 | 
			
		||||
            return $next($request);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -92,12 +92,6 @@ class CustomerProfileRequest extends FormRequest
 | 
			
		||||
            ],
 | 
			
		||||
            'shipping.fax' => [
 | 
			
		||||
                'nullable',
 | 
			
		||||
            ],
 | 
			
		||||
            'customer_avatar' => [
 | 
			
		||||
                'nullable',
 | 
			
		||||
                'file',
 | 
			
		||||
                'mimes:gif,jpg,png',
 | 
			
		||||
                'max:20000'
 | 
			
		||||
            ]
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -1,37 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Crater\Http\Requests;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
 | 
			
		||||
class UnzipUpdateRequest extends FormRequest
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Determine if the user is authorized to make this request.
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function authorize()
 | 
			
		||||
    {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the validation rules that apply to the request.
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function rules()
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'path' => [
 | 
			
		||||
                'required',
 | 
			
		||||
                'regex:/^[\.\/\w\-]+$/'
 | 
			
		||||
            ],
 | 
			
		||||
            'module' => [
 | 
			
		||||
                'required',
 | 
			
		||||
                'string'
 | 
			
		||||
            ]
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,34 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Crater\Http\Requests;
 | 
			
		||||
 | 
			
		||||
use Crater\Rules\Base64Mime;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
 | 
			
		||||
class UploadExpenseReceiptRequest extends FormRequest
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Determine if the user is authorized to make this request.
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function authorize()
 | 
			
		||||
    {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the validation rules that apply to the request.
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function rules()
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'attachment_receipt' => [
 | 
			
		||||
                'nullable',
 | 
			
		||||
                new Base64Mime(['gif', 'jpg', 'png'])
 | 
			
		||||
            ]
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,40 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Crater\Http\Requests;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
 | 
			
		||||
class UploadModuleRequest extends FormRequest
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Determine if the user is authorized to make this request.
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function authorize()
 | 
			
		||||
    {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the validation rules that apply to the request.
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function rules()
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'avatar' => [
 | 
			
		||||
                'required',
 | 
			
		||||
                'file',
 | 
			
		||||
                'mimes:zip',
 | 
			
		||||
                'max:20000'
 | 
			
		||||
            ],
 | 
			
		||||
            'module' => [
 | 
			
		||||
                'required',
 | 
			
		||||
                'string',
 | 
			
		||||
                'max:100'
 | 
			
		||||
            ]
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -24,7 +24,7 @@ class InvoiceResource extends JsonResource
 | 
			
		||||
            'paid_status' => $this->paid_status,
 | 
			
		||||
            'tax_per_item' => $this->tax_per_item,
 | 
			
		||||
            'discount_per_item' => $this->discount_per_item,
 | 
			
		||||
            'notes' => $this->getNotes(),
 | 
			
		||||
            'notes' => $this->notes,
 | 
			
		||||
            'discount_type' => $this->discount_type,
 | 
			
		||||
            'discount' => $this->discount,
 | 
			
		||||
            'discount_val' => $this->discount_val,
 | 
			
		||||
@ -46,12 +46,10 @@ class InvoiceResource extends JsonResource
 | 
			
		||||
            'base_due_amount' => $this->base_due_amount,
 | 
			
		||||
            'currency_id' => $this->currency_id,
 | 
			
		||||
            'formatted_created_at' => $this->formattedCreatedAt,
 | 
			
		||||
            'formatted_notes' => $this->formattedNotes,
 | 
			
		||||
            'invoice_pdf_url' => $this->invoicePdfUrl,
 | 
			
		||||
            'formatted_invoice_date' => $this->formattedInvoiceDate,
 | 
			
		||||
            'formatted_due_date' => $this->formattedDueDate,
 | 
			
		||||
            'payment_module_enabled' => $this->payment_module_enabled,
 | 
			
		||||
            'overdue' => $this->overdue,
 | 
			
		||||
            'items' => $this->when($this->items()->exists(), function () {
 | 
			
		||||
                return InvoiceItemResource::collection($this->items);
 | 
			
		||||
            }),
 | 
			
		||||
 | 
			
		||||
@ -23,7 +23,7 @@ class EstimateResource extends JsonResource
 | 
			
		||||
            'reference_number' => $this->reference_number,
 | 
			
		||||
            'tax_per_item' => $this->tax_per_item,
 | 
			
		||||
            'discount_per_item' => $this->discount_per_item,
 | 
			
		||||
            'notes' => $this->getNotes(),
 | 
			
		||||
            'notes' => $this->notes,
 | 
			
		||||
            'discount' => $this->discount,
 | 
			
		||||
            'discount_type' => $this->discount_type,
 | 
			
		||||
            'discount_val' => $this->discount_val,
 | 
			
		||||
 | 
			
		||||
@ -55,7 +55,6 @@ class InvoiceResource extends JsonResource
 | 
			
		||||
            'payment_module_enabled' => $this->payment_module_enabled,
 | 
			
		||||
            'sales_tax_type' => $this->sales_tax_type,
 | 
			
		||||
            'sales_tax_address_type' => $this->sales_tax_address_type,
 | 
			
		||||
            'overdue' => $this->overdue,
 | 
			
		||||
            'items' => $this->when($this->items()->exists(), function () {
 | 
			
		||||
                return InvoiceItemResource::collection($this->items);
 | 
			
		||||
            }),
 | 
			
		||||
 | 
			
		||||
@ -18,7 +18,7 @@ class PaymentResource extends JsonResource
 | 
			
		||||
            'id' => $this->id,
 | 
			
		||||
            'payment_number' => $this->payment_number,
 | 
			
		||||
            'payment_date' => $this->payment_date,
 | 
			
		||||
            'notes' => $this->getNotes(),
 | 
			
		||||
            'notes' => $this->notes,
 | 
			
		||||
            'amount' => $this->amount,
 | 
			
		||||
            'unique_hash' => $this->unique_hash,
 | 
			
		||||
            'invoice_id' => $this->invoice_id,
 | 
			
		||||
 | 
			
		||||
@ -217,7 +217,7 @@ class Company extends Model implements HasMedia
 | 
			
		||||
            'estimate_billing_address_format' => $billingAddressFormat,
 | 
			
		||||
            'payment_company_address_format' => $companyAddressFormat,
 | 
			
		||||
            'payment_from_customer_address_format' => $paymentFromCustomerAddress,
 | 
			
		||||
            'currency' => request()->currency ?? 13,
 | 
			
		||||
            'currency' => request()->currency ?? 12,
 | 
			
		||||
            'time_zone' => 'Asia/Kolkata',
 | 
			
		||||
            'language' => 'en',
 | 
			
		||||
            'fiscal_year' => '1-12',
 | 
			
		||||
@ -300,10 +300,6 @@ class Company extends Model implements HasMedia
 | 
			
		||||
        if ($this->invoices()->exists()) {
 | 
			
		||||
            $this->invoices->map(function ($invoice) {
 | 
			
		||||
                $this->checkModelData($invoice);
 | 
			
		||||
 | 
			
		||||
                if ($invoice->transactions()->exists()) {
 | 
			
		||||
                    $invoice->transactions()->delete();
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            $this->invoices()->delete();
 | 
			
		||||
@ -380,21 +376,4 @@ 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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -139,12 +139,7 @@ class Customer extends Authenticatable implements HasMedia
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ($customer->invoices()->exists()) {
 | 
			
		||||
                $customer->invoices->map(function ($invoice) {
 | 
			
		||||
                    if ($invoice->transactions()->exists()) {
 | 
			
		||||
                        $invoice->transactions()->delete();
 | 
			
		||||
                    }
 | 
			
		||||
                    $invoice->delete();
 | 
			
		||||
                });
 | 
			
		||||
                $customer->invoices()->delete();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ($customer->payments()->exists()) {
 | 
			
		||||
 | 
			
		||||
@ -412,10 +412,6 @@ 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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -484,6 +480,7 @@ class Estimate extends Model implements HasMedia
 | 
			
		||||
            '{ESTIMATE_EXPIRY_DATE}' => $this->formattedExpiryDate,
 | 
			
		||||
            '{ESTIMATE_NUMBER}' => $this->estimate_number,
 | 
			
		||||
            '{ESTIMATE_REF_NUMBER}' => $this->reference_number,
 | 
			
		||||
            '{ESTIMATE_LINK}' => url('/customer/estimates/pdf/'.$this->unique_hash),
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -262,9 +262,6 @@ class Expense extends Model implements HasMedia
 | 
			
		||||
            ExchangeRateLog::addExchangeRateLog($this);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (isset($request->is_attachment_receipt_removed) && (bool) $request->is_attachment_receipt_removed) {
 | 
			
		||||
            $this->clearMediaCollection('receipts');
 | 
			
		||||
        }
 | 
			
		||||
        if ($request->hasFile('attachment_receipt')) {
 | 
			
		||||
            $this->clearMediaCollection('receipts');
 | 
			
		||||
            $this->addMediaFromRequest('attachment_receipt')->toMediaCollection('receipts');
 | 
			
		||||
 | 
			
		||||
@ -28,8 +28,10 @@ class Invoice extends Model implements HasMedia
 | 
			
		||||
    public const STATUS_DRAFT = 'DRAFT';
 | 
			
		||||
    public const STATUS_SENT = 'SENT';
 | 
			
		||||
    public const STATUS_VIEWED = 'VIEWED';
 | 
			
		||||
    public const STATUS_OVERDUE = 'OVERDUE';
 | 
			
		||||
    public const STATUS_COMPLETED = 'COMPLETED';
 | 
			
		||||
 | 
			
		||||
    public const STATUS_DUE = 'DUE';
 | 
			
		||||
    public const STATUS_UNPAID = 'UNPAID';
 | 
			
		||||
    public const STATUS_PARTIALLY_PAID = 'PARTIALLY_PAID';
 | 
			
		||||
    public const STATUS_PAID = 'PAID';
 | 
			
		||||
@ -136,6 +138,7 @@ class Invoice extends Model implements HasMedia
 | 
			
		||||
            self::STATUS_DRAFT,
 | 
			
		||||
            self::STATUS_SENT,
 | 
			
		||||
            self::STATUS_VIEWED,
 | 
			
		||||
            self::STATUS_OVERDUE,
 | 
			
		||||
            self::STATUS_COMPLETED,
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
@ -152,7 +155,9 @@ class Invoice extends Model implements HasMedia
 | 
			
		||||
 | 
			
		||||
    public function getPreviousStatus()
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->viewed) {
 | 
			
		||||
        if ($this->due_date < Carbon::now()) {
 | 
			
		||||
            return self::STATUS_OVERDUE;
 | 
			
		||||
        } elseif ($this->viewed) {
 | 
			
		||||
            return self::STATUS_VIEWED;
 | 
			
		||||
        } elseif ($this->sent) {
 | 
			
		||||
            return self::STATUS_SENT;
 | 
			
		||||
@ -161,11 +166,6 @@ class Invoice extends Model implements HasMedia
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormattedNotesAttribute($value)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->getNotes();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getFormattedCreatedAtAttribute($value)
 | 
			
		||||
    {
 | 
			
		||||
        $dateFormat = CompanySetting::getSetting('carbon_date_format', $this->company_id);
 | 
			
		||||
@ -249,7 +249,7 @@ class Invoice extends Model implements HasMedia
 | 
			
		||||
                $filters->get('status') == self::STATUS_PAID
 | 
			
		||||
            ) {
 | 
			
		||||
                $query->wherePaidStatus($filters->get('status'));
 | 
			
		||||
            } elseif ($filters->get('status') == 'DUE') {
 | 
			
		||||
            } elseif ($filters->get('status') == self::STATUS_DUE) {
 | 
			
		||||
                $query->whereDueStatus($filters->get('status'));
 | 
			
		||||
            } else {
 | 
			
		||||
                $query->whereStatus($filters->get('status'));
 | 
			
		||||
@ -443,8 +443,7 @@ class Invoice extends Model implements HasMedia
 | 
			
		||||
        $data['invoice'] = $this->toArray();
 | 
			
		||||
        $data['customer'] = $this->customer->toArray();
 | 
			
		||||
        $data['company'] = Company::find($this->company_id);
 | 
			
		||||
        $data['subject'] = $this->getEmailString($data['subject']);
 | 
			
		||||
        $data['body'] = $this->getEmailString($data['body']);
 | 
			
		||||
        $data['body'] = $this->getEmailBody($data['body']);
 | 
			
		||||
        $data['attach']['data'] = ($this->getEmailAttachmentSetting()) ? $this->getPDFData() : null;
 | 
			
		||||
 | 
			
		||||
        return $data;
 | 
			
		||||
@ -499,10 +498,6 @@ class Invoice extends Model implements HasMedia
 | 
			
		||||
            if (array_key_exists('taxes', $invoiceItem) && $invoiceItem['taxes']) {
 | 
			
		||||
                foreach ($invoiceItem['taxes'] as $tax) {
 | 
			
		||||
                    $tax['company_id'] = $invoice->company_id;
 | 
			
		||||
                    $tax['exchange_rate'] = $invoice->exchange_rate;
 | 
			
		||||
                    $tax['base_amount'] = $tax['amount'] * $exchange_rate;
 | 
			
		||||
                    $tax['currency_id'] = $invoice->currency_id;
 | 
			
		||||
 | 
			
		||||
                    if (gettype($tax['amount']) !== "NULL") {
 | 
			
		||||
                        if (array_key_exists('recurring_invoice_id', $invoiceItem)) {
 | 
			
		||||
                            unset($invoiceItem['recurring_invoice_id']);
 | 
			
		||||
@ -525,7 +520,7 @@ class Invoice extends Model implements HasMedia
 | 
			
		||||
 | 
			
		||||
        foreach ($taxes as $tax) {
 | 
			
		||||
            $tax['company_id'] = $invoice->company_id;
 | 
			
		||||
            $tax['exchange_rate'] = $invoice->exchange_rate;
 | 
			
		||||
            $tax['exchnage_rate'] = $invoice->exchange_rate;
 | 
			
		||||
            $tax['base_amount'] = $tax['amount'] * $exchange_rate;
 | 
			
		||||
            $tax['currency_id'] = $invoice->currency_id;
 | 
			
		||||
 | 
			
		||||
@ -580,10 +575,6 @@ 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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -636,7 +627,7 @@ class Invoice extends Model implements HasMedia
 | 
			
		||||
        return $this->getFormattedString($this->notes);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getEmailString($body)
 | 
			
		||||
    public function getEmailBody($body)
 | 
			
		||||
    {
 | 
			
		||||
        $values = array_merge($this->getFieldsArray(), $this->getExtraFields());
 | 
			
		||||
 | 
			
		||||
@ -652,6 +643,7 @@ class Invoice extends Model implements HasMedia
 | 
			
		||||
            '{INVOICE_DUE_DATE}' => $this->formattedDueDate,
 | 
			
		||||
            '{INVOICE_NUMBER}' => $this->invoice_number,
 | 
			
		||||
            '{INVOICE_REF_NUMBER}' => $this->reference_number,
 | 
			
		||||
            '{INVOICE_LINK}' => url('/customer/invoices/pdf/'.$this->unique_hash),
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -696,7 +688,6 @@ class Invoice extends Model implements HasMedia
 | 
			
		||||
        if ($amount == 0) {
 | 
			
		||||
            $this->status = Invoice::STATUS_COMPLETED;
 | 
			
		||||
            $this->paid_status = Invoice::STATUS_PAID;
 | 
			
		||||
            $this->overdue = false;
 | 
			
		||||
        } elseif ($amount == $this->total) {
 | 
			
		||||
            $this->status = $this->getPreviousStatus();
 | 
			
		||||
            $this->paid_status = Invoice::STATUS_UNPAID;
 | 
			
		||||
@ -707,19 +698,4 @@ class Invoice extends Model implements HasMedia
 | 
			
		||||
 | 
			
		||||
        $this->save();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function deleteInvoices($ids)
 | 
			
		||||
    {
 | 
			
		||||
        foreach ($ids as $id) {
 | 
			
		||||
            $invoice = self::find($id);
 | 
			
		||||
 | 
			
		||||
            if ($invoice->transactions()->exists()) {
 | 
			
		||||
                $invoice->transactions()->delete();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $invoice->delete();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -375,10 +375,6 @@ 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');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -436,6 +432,7 @@ class Payment extends Model implements HasMedia
 | 
			
		||||
            '{PAYMENT_MODE}' => $this->paymentMethod ? $this->paymentMethod->name : null,
 | 
			
		||||
            '{PAYMENT_NUMBER}' => $this->payment_number,
 | 
			
		||||
            '{PAYMENT_AMOUNT}' => $this->reference_number,
 | 
			
		||||
            '{PAYMENT_LINK}' => url('/customer/payments/pdf/'.$this->unique_hash)
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -31,11 +31,6 @@ class PaymentMethod extends Model
 | 
			
		||||
        return $this->hasMany(Payment::class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function expenses()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->hasMany(Expense::class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function company()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->belongsTo(Company::class);
 | 
			
		||||
 | 
			
		||||
@ -305,15 +305,9 @@ 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($days)->format('Y-m-d');
 | 
			
		||||
        $newInvoice['due_date'] = Carbon::today()->addDays(7)->format('Y-m-d');
 | 
			
		||||
        $newInvoice['status'] = Invoice::STATUS_DRAFT;
 | 
			
		||||
        $newInvoice['company_id'] = $this->company_id;
 | 
			
		||||
        $newInvoice['paid_status'] = Invoice::STATUS_UNPAID;
 | 
			
		||||
 | 
			
		||||
@ -1,36 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Crater\Providers;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Facades\View;
 | 
			
		||||
use Illuminate\Support\ServiceProvider;
 | 
			
		||||
use Schema;
 | 
			
		||||
 | 
			
		||||
class ViewServiceProvider extends ServiceProvider
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Register services.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function register()
 | 
			
		||||
    {
 | 
			
		||||
        //
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Bootstrap services.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function boot()
 | 
			
		||||
    {
 | 
			
		||||
        if (\Storage::disk('local')->has('database_created') && Schema::hasTable('settings')) {
 | 
			
		||||
            View::share('login_page_logo', get_app_setting('login_page_logo'));
 | 
			
		||||
            View::share('login_page_heading', get_app_setting('login_page_heading'));
 | 
			
		||||
            View::share('login_page_description', get_app_setting('login_page_description'));
 | 
			
		||||
            View::share('admin_page_title', get_app_setting('admin_page_title'));
 | 
			
		||||
            View::share('copyright_text', get_app_setting('copyright_text'));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -7,55 +7,51 @@ use Crater\Models\Setting;
 | 
			
		||||
use Illuminate\Support\Str;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get company setting
 | 
			
		||||
 * Get current customer theme
 | 
			
		||||
 *
 | 
			
		||||
 * @param $company_id
 | 
			
		||||
 * @return string
 | 
			
		||||
 */
 | 
			
		||||
function get_company_setting($key, $company_id)
 | 
			
		||||
function get_customer_portal_theme($company_id)
 | 
			
		||||
{
 | 
			
		||||
    if (\Storage::disk('local')->has('database_created')) {
 | 
			
		||||
        return CompanySetting::getSetting($key, $company_id);
 | 
			
		||||
        return CompanySetting::getSetting('customer_portal_theme', $company_id);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get app setting
 | 
			
		||||
 * Get current customer logo
 | 
			
		||||
 *
 | 
			
		||||
 * @param $company_id
 | 
			
		||||
 * @return string
 | 
			
		||||
 */
 | 
			
		||||
function get_app_setting($key)
 | 
			
		||||
function get_customer_logo($company_id)
 | 
			
		||||
{
 | 
			
		||||
    if (\Storage::disk('local')->has('database_created')) {
 | 
			
		||||
        return Setting::getSetting($key);
 | 
			
		||||
        return CompanySetting::getSetting('customer_portal_logo', $company_id);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get page title
 | 
			
		||||
 * Get current admin theme
 | 
			
		||||
 *
 | 
			
		||||
 * @param $company_id
 | 
			
		||||
 * @return string
 | 
			
		||||
 */
 | 
			
		||||
function get_page_title($company_id)
 | 
			
		||||
function get_admin_portal_theme()
 | 
			
		||||
{
 | 
			
		||||
    $routeName = Route::currentRouteName();
 | 
			
		||||
 | 
			
		||||
    $pageTitle = null;
 | 
			
		||||
    $defaultPageTitle = 'Crater - Self Hosted Invoicing Platform';
 | 
			
		||||
 | 
			
		||||
    if (\Storage::disk('local')->has('database_created')) {
 | 
			
		||||
        if ($routeName === 'customer.dashboard') {
 | 
			
		||||
            $pageTitle = CompanySetting::getSetting('customer_portal_page_title', $company_id);
 | 
			
		||||
        $setting = Setting::getSetting('admin_portal_theme');
 | 
			
		||||
 | 
			
		||||
            return $pageTitle ? $pageTitle : $defaultPageTitle;
 | 
			
		||||
        if ($setting) {
 | 
			
		||||
            return $setting;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $pageTitle = Setting::getSetting('admin_page_title');
 | 
			
		||||
 | 
			
		||||
        return $pageTitle ? $pageTitle : $defaultPageTitle;
 | 
			
		||||
        return  'crater';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 'crater';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,7 @@ trait GeneratesPdfTrait
 | 
			
		||||
        if ($pdf && file_exists($pdf['path'])) {
 | 
			
		||||
            return response()->make(file_get_contents($pdf['path']), 200, [
 | 
			
		||||
                'Content-Type' => 'application/pdf',
 | 
			
		||||
                'Content-Disposition' => 'inline; filename="'.$pdf['file_name'].'"',
 | 
			
		||||
                'Content-Disposition' => 'inline; filename="'.$pdf['file_name'].'.pdf"',
 | 
			
		||||
            ]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -158,10 +158,6 @@ trait GeneratesPdfTrait
 | 
			
		||||
            $fields['{'.$customField->customField->slug.'}'] = $customField->defaultAnswer;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        foreach ($fields as $key => $field) {
 | 
			
		||||
            $fields[$key] = htmlspecialchars($field, ENT_QUOTES, 'UTF-8');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $fields;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -39,14 +39,14 @@
 | 
			
		||||
    "beyondcode/laravel-dump-server": "^1.0",
 | 
			
		||||
    "facade/ignition": "^2.3.6",
 | 
			
		||||
    "friendsofphp/php-cs-fixer": "^3.0",
 | 
			
		||||
    "fakerphp/faker": "^1.9.1",
 | 
			
		||||
    "fzaninotto/faker": "^1.9.1",
 | 
			
		||||
    "mockery/mockery": "^1.3.1",
 | 
			
		||||
    "nunomaduro/collision": "^5.0",
 | 
			
		||||
    "pestphp/pest": "^1.0",
 | 
			
		||||
    "pestphp/pest-plugin-faker": "^1.0",
 | 
			
		||||
    "pestphp/pest-plugin-laravel": "^1.0",
 | 
			
		||||
    "pestphp/pest-plugin-parallel": "^0.2.1",
 | 
			
		||||
    "phpunit/phpunit": "^9.3"
 | 
			
		||||
    "phpunit/phpunit": "^9.0"
 | 
			
		||||
  },
 | 
			
		||||
  "autoload": {
 | 
			
		||||
    "psr-4": {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										56
									
								
								composer.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										56
									
								
								composer.lock
									
									
									
										generated
									
									
									
								
							@ -1639,16 +1639,16 @@
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "guzzlehttp/guzzle",
 | 
			
		||||
            "version": "7.4.3",
 | 
			
		||||
            "version": "7.4.1",
 | 
			
		||||
            "source": {
 | 
			
		||||
                "type": "git",
 | 
			
		||||
                "url": "https://github.com/guzzle/guzzle.git",
 | 
			
		||||
                "reference": "74a8602c6faec9ef74b7a9391ac82c5e65b1cdab"
 | 
			
		||||
                "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79"
 | 
			
		||||
            },
 | 
			
		||||
            "dist": {
 | 
			
		||||
                "type": "zip",
 | 
			
		||||
                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/74a8602c6faec9ef74b7a9391ac82c5e65b1cdab",
 | 
			
		||||
                "reference": "74a8602c6faec9ef74b7a9391ac82c5e65b1cdab",
 | 
			
		||||
                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee0a041b1760e6a53d2a39c8c34115adc2af2c79",
 | 
			
		||||
                "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79",
 | 
			
		||||
                "shasum": ""
 | 
			
		||||
            },
 | 
			
		||||
            "require": {
 | 
			
		||||
@ -1681,12 +1681,12 @@
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "autoload": {
 | 
			
		||||
                "files": [
 | 
			
		||||
                    "src/functions_include.php"
 | 
			
		||||
                ],
 | 
			
		||||
                "psr-4": {
 | 
			
		||||
                    "GuzzleHttp\\": "src/"
 | 
			
		||||
                }
 | 
			
		||||
                },
 | 
			
		||||
                "files": [
 | 
			
		||||
                    "src/functions_include.php"
 | 
			
		||||
                ]
 | 
			
		||||
            },
 | 
			
		||||
            "notification-url": "https://packagist.org/downloads/",
 | 
			
		||||
            "license": [
 | 
			
		||||
@ -1743,7 +1743,7 @@
 | 
			
		||||
            ],
 | 
			
		||||
            "support": {
 | 
			
		||||
                "issues": "https://github.com/guzzle/guzzle/issues",
 | 
			
		||||
                "source": "https://github.com/guzzle/guzzle/tree/7.4.3"
 | 
			
		||||
                "source": "https://github.com/guzzle/guzzle/tree/7.4.1"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": [
 | 
			
		||||
                {
 | 
			
		||||
@ -1759,7 +1759,7 @@
 | 
			
		||||
                    "type": "tidelift"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "time": "2022-05-25T13:24:33+00:00"
 | 
			
		||||
            "time": "2021-12-06T18:43:05+00:00"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "guzzlehttp/promises",
 | 
			
		||||
@ -1788,12 +1788,12 @@
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "autoload": {
 | 
			
		||||
                "files": [
 | 
			
		||||
                    "src/functions_include.php"
 | 
			
		||||
                ],
 | 
			
		||||
                "psr-4": {
 | 
			
		||||
                    "GuzzleHttp\\Promise\\": "src/"
 | 
			
		||||
                }
 | 
			
		||||
                },
 | 
			
		||||
                "files": [
 | 
			
		||||
                    "src/functions_include.php"
 | 
			
		||||
                ]
 | 
			
		||||
            },
 | 
			
		||||
            "notification-url": "https://packagist.org/downloads/",
 | 
			
		||||
            "license": [
 | 
			
		||||
@ -1847,16 +1847,16 @@
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "guzzlehttp/psr7",
 | 
			
		||||
            "version": "2.2.1",
 | 
			
		||||
            "version": "2.1.0",
 | 
			
		||||
            "source": {
 | 
			
		||||
                "type": "git",
 | 
			
		||||
                "url": "https://github.com/guzzle/psr7.git",
 | 
			
		||||
                "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2"
 | 
			
		||||
                "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72"
 | 
			
		||||
            },
 | 
			
		||||
            "dist": {
 | 
			
		||||
                "type": "zip",
 | 
			
		||||
                "url": "https://api.github.com/repos/guzzle/psr7/zipball/c94a94f120803a18554c1805ef2e539f8285f9a2",
 | 
			
		||||
                "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2",
 | 
			
		||||
                "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72",
 | 
			
		||||
                "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72",
 | 
			
		||||
                "shasum": ""
 | 
			
		||||
            },
 | 
			
		||||
            "require": {
 | 
			
		||||
@ -1880,7 +1880,7 @@
 | 
			
		||||
            "type": "library",
 | 
			
		||||
            "extra": {
 | 
			
		||||
                "branch-alias": {
 | 
			
		||||
                    "dev-master": "2.2-dev"
 | 
			
		||||
                    "dev-master": "2.1-dev"
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "autoload": {
 | 
			
		||||
@ -1942,7 +1942,7 @@
 | 
			
		||||
            ],
 | 
			
		||||
            "support": {
 | 
			
		||||
                "issues": "https://github.com/guzzle/psr7/issues",
 | 
			
		||||
                "source": "https://github.com/guzzle/psr7/tree/2.2.1"
 | 
			
		||||
                "source": "https://github.com/guzzle/psr7/tree/2.1.0"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": [
 | 
			
		||||
                {
 | 
			
		||||
@ -1958,7 +1958,7 @@
 | 
			
		||||
                    "type": "tidelift"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "time": "2022-03-20T21:55:58+00:00"
 | 
			
		||||
            "time": "2021-10-06T17:43:30+00:00"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "hamcrest/hamcrest-php",
 | 
			
		||||
@ -7657,16 +7657,16 @@
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "symfony/deprecation-contracts",
 | 
			
		||||
            "version": "v2.5.1",
 | 
			
		||||
            "version": "v2.5.0",
 | 
			
		||||
            "source": {
 | 
			
		||||
                "type": "git",
 | 
			
		||||
                "url": "https://github.com/symfony/deprecation-contracts.git",
 | 
			
		||||
                "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66"
 | 
			
		||||
                "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8"
 | 
			
		||||
            },
 | 
			
		||||
            "dist": {
 | 
			
		||||
                "type": "zip",
 | 
			
		||||
                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
 | 
			
		||||
                "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
 | 
			
		||||
                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8",
 | 
			
		||||
                "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8",
 | 
			
		||||
                "shasum": ""
 | 
			
		||||
            },
 | 
			
		||||
            "require": {
 | 
			
		||||
@ -7704,7 +7704,7 @@
 | 
			
		||||
            "description": "A generic function and convention to trigger deprecation notices",
 | 
			
		||||
            "homepage": "https://symfony.com",
 | 
			
		||||
            "support": {
 | 
			
		||||
                "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1"
 | 
			
		||||
                "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": [
 | 
			
		||||
                {
 | 
			
		||||
@ -7720,7 +7720,7 @@
 | 
			
		||||
                    "type": "tidelift"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "time": "2022-01-02T09:53:40+00:00"
 | 
			
		||||
            "time": "2021-07-12T14:48:14+00:00"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "symfony/error-handler",
 | 
			
		||||
@ -12407,5 +12407,5 @@
 | 
			
		||||
        "php": "^7.4 || ^8.0"
 | 
			
		||||
    },
 | 
			
		||||
    "platform-dev": [],
 | 
			
		||||
    "plugin-api-version": "2.3.0"
 | 
			
		||||
    "plugin-api-version": "2.0.0"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -168,7 +168,6 @@ return [
 | 
			
		||||
        Crater\Providers\EventServiceProvider::class,
 | 
			
		||||
        Crater\Providers\RouteServiceProvider::class,
 | 
			
		||||
        Crater\Providers\DropboxServiceProvider::class,
 | 
			
		||||
        Crater\Providers\ViewServiceProvider::class,
 | 
			
		||||
        Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,
 | 
			
		||||
    ],
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -68,10 +68,6 @@ return [
 | 
			
		||||
        ["code" => "sv", "name" => "Svenska"],
 | 
			
		||||
        ["code" => "sk", "name" => "Slovak"],
 | 
			
		||||
        ["code" => "vi", "name" => "Tiếng Việt"],
 | 
			
		||||
        ["code" => "cs", "name" => "Czech"],
 | 
			
		||||
        ["code" => "el", "name" => "Greek"],
 | 
			
		||||
        ["code" => "hr", "name" => "Crotian"],
 | 
			
		||||
        ["code" => "th", "name" => "ไทย"],
 | 
			
		||||
    ],
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 | 
			
		||||
@ -1,3 +0,0 @@
 | 
			
		||||
files:
 | 
			
		||||
  - source: /resources/scripts/locales/en.json
 | 
			
		||||
    translation: /resources/scripts/locales/%two_letters_code%.json
 | 
			
		||||
@ -37,6 +37,15 @@ class InvoiceFactory extends Factory
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function overdue()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->state(function (array $attributes) {
 | 
			
		||||
            return [
 | 
			
		||||
                'status' => Invoice::STATUS_OVERDUE,
 | 
			
		||||
            ];
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function completed()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->state(function (array $attributes) {
 | 
			
		||||
@ -46,6 +55,15 @@ class InvoiceFactory extends Factory
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function due()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->state(function (array $attributes) {
 | 
			
		||||
            return [
 | 
			
		||||
                'status' => Invoice::STATUS_DUE,
 | 
			
		||||
            ];
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function unpaid()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->state(function (array $attributes) {
 | 
			
		||||
 | 
			
		||||
@ -1,27 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use Crater\Models\Setting;
 | 
			
		||||
use Illuminate\Database\Migrations\Migration;
 | 
			
		||||
 | 
			
		||||
class UpdateCraterVersion601 extends Migration
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Run the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function up()
 | 
			
		||||
    {
 | 
			
		||||
        Setting::setSetting('version', '6.0.1');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Reverse the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function down()
 | 
			
		||||
    {
 | 
			
		||||
        //
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,27 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use Crater\Models\Setting;
 | 
			
		||||
use Illuminate\Database\Migrations\Migration;
 | 
			
		||||
 | 
			
		||||
class UpdateCraterVersion602 extends Migration
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Run the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function up()
 | 
			
		||||
    {
 | 
			
		||||
        Setting::setSetting('version', '6.0.2');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Reverse the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function down()
 | 
			
		||||
    {
 | 
			
		||||
        //
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,27 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use Crater\Models\Setting;
 | 
			
		||||
use Illuminate\Database\Migrations\Migration;
 | 
			
		||||
 | 
			
		||||
class UpdateCraterVersion603 extends Migration
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Run the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function up()
 | 
			
		||||
    {
 | 
			
		||||
        Setting::setSetting('version', '6.0.3');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Reverse the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function down()
 | 
			
		||||
    {
 | 
			
		||||
        //
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,27 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use Crater\Models\Setting;
 | 
			
		||||
use Illuminate\Database\Migrations\Migration;
 | 
			
		||||
 | 
			
		||||
class UpdateCraterVersion604 extends Migration
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Run the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function up()
 | 
			
		||||
    {
 | 
			
		||||
        Setting::setSetting('version', '6.0.4');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Reverse the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function down()
 | 
			
		||||
    {
 | 
			
		||||
        //
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,30 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use Illuminate\Database\Migrations\Migration;
 | 
			
		||||
use Illuminate\Database\Schema\Blueprint;
 | 
			
		||||
use Illuminate\Support\Facades\Schema;
 | 
			
		||||
 | 
			
		||||
class UpdateValueColumnToNullableOnSettingsTable extends Migration
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Run the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function up()
 | 
			
		||||
    {
 | 
			
		||||
        Schema::table('settings', function (Blueprint $table) {
 | 
			
		||||
            $table->string('value')->nullable()->change();
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Reverse the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function down()
 | 
			
		||||
    {
 | 
			
		||||
        //
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,32 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use Illuminate\Database\Migrations\Migration;
 | 
			
		||||
use Illuminate\Database\Schema\Blueprint;
 | 
			
		||||
use Illuminate\Support\Facades\Schema;
 | 
			
		||||
 | 
			
		||||
class AddOverdueToInvoicesTable extends Migration
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Run the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function up()
 | 
			
		||||
    {
 | 
			
		||||
        Schema::table('invoices', function (Blueprint $table) {
 | 
			
		||||
            $table->boolean('overdue')->default(false);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Reverse the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function down()
 | 
			
		||||
    {
 | 
			
		||||
        Schema::table('invoices', function (Blueprint $table) {
 | 
			
		||||
            $table->dropForeign(['overdue']);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,27 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use Crater\Models\Setting;
 | 
			
		||||
use Illuminate\Database\Migrations\Migration;
 | 
			
		||||
 | 
			
		||||
class CraterVersion605 extends Migration
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Run the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function up()
 | 
			
		||||
    {
 | 
			
		||||
        Setting::setSetting('version', '6.0.5');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Reverse the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function down()
 | 
			
		||||
    {
 | 
			
		||||
        //
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,35 +0,0 @@
 | 
			
		||||
<?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()
 | 
			
		||||
    {
 | 
			
		||||
        //
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,38 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use Crater\Models\InvoiceItem;
 | 
			
		||||
use Crater\Models\Tax;
 | 
			
		||||
use Illuminate\Database\Migrations\Migration;
 | 
			
		||||
 | 
			
		||||
class CalculateBaseValuesForInvoiceItems extends Migration
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Run the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function up()
 | 
			
		||||
    {
 | 
			
		||||
        $taxes = Tax::whereRelation('invoiceItem', 'base_amount', null)->get();
 | 
			
		||||
 | 
			
		||||
        if ($taxes) {
 | 
			
		||||
            $taxes->map(function ($tax) {
 | 
			
		||||
                $invoiceItem = InvoiceItem::find($tax->invoice_item_id);
 | 
			
		||||
                $exchange_rate = $invoiceItem->exchange_rate;
 | 
			
		||||
                $tax->exchange_rate = $exchange_rate;
 | 
			
		||||
                $tax->base_amount = $tax->amount * $exchange_rate;
 | 
			
		||||
                $tax->save();
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Reverse the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function down()
 | 
			
		||||
    {
 | 
			
		||||
        //
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,27 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use Crater\Models\Setting;
 | 
			
		||||
use Illuminate\Database\Migrations\Migration;
 | 
			
		||||
 | 
			
		||||
class UpdateCraterVersion606 extends Migration
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Run the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function up()
 | 
			
		||||
    {
 | 
			
		||||
        Setting::setSetting('version', '6.0.6');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Reverse the migrations.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function down()
 | 
			
		||||
    {
 | 
			
		||||
        //
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -170,7 +170,7 @@ class CountriesTableSeeder extends Seeder
 | 
			
		||||
        ['id' => 152,'code' => 'NR','name' => "Nauru",'phonecode' => 674],
 | 
			
		||||
        ['id' => 153,'code' => 'NP','name' => "Nepal",'phonecode' => 977],
 | 
			
		||||
        ['id' => 154,'code' => 'AN','name' => "Netherlands Antilles",'phonecode' => 599],
 | 
			
		||||
        ['id' => 155,'code' => 'NL','name' => "Netherlands",'phonecode' => 31],
 | 
			
		||||
        ['id' => 155,'code' => 'NL','name' => "Netherlands The",'phonecode' => 31],
 | 
			
		||||
        ['id' => 156,'code' => 'NC','name' => "New Caledonia",'phonecode' => 687],
 | 
			
		||||
        ['id' => 157,'code' => 'NZ','name' => "New Zealand",'phonecode' => 64],
 | 
			
		||||
        ['id' => 158,'code' => 'NI','name' => "Nicaragua",'phonecode' => 505],
 | 
			
		||||
 | 
			
		||||
@ -106,14 +106,6 @@ class CurrenciesTableSeeder extends Seeder
 | 
			
		||||
                'thousand_separator' => ',',
 | 
			
		||||
                'decimal_separator' => '.',
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => 'Nepali Rupee',
 | 
			
		||||
                'code' => 'NPR',
 | 
			
		||||
                'symbol' => 'रू',
 | 
			
		||||
                'precision' => '2',
 | 
			
		||||
                'thousand_separator' => ',',
 | 
			
		||||
                'decimal_separator' => '.',
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => 'Indian Rupee',
 | 
			
		||||
                'code' => 'INR',
 | 
			
		||||
@ -275,14 +267,6 @@ class CurrenciesTableSeeder extends Seeder
 | 
			
		||||
                'thousand_separator' => '.',
 | 
			
		||||
                'decimal_separator' => ',',
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => 'Central African Franc',
 | 
			
		||||
                'code' => 'XAF',
 | 
			
		||||
                'symbol' => 'CFA ',
 | 
			
		||||
                'precision' => '2',
 | 
			
		||||
                'thousand_separator' => ',',
 | 
			
		||||
                'decimal_separator' => '.',
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => 'West African Franc',
 | 
			
		||||
                'code' => 'XOF',
 | 
			
		||||
@ -591,15 +575,6 @@ class CurrenciesTableSeeder extends Seeder
 | 
			
		||||
                'thousand_separator' => ',',
 | 
			
		||||
                'decimal_separator' => '.',
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => 'Macedonian Denar',
 | 
			
		||||
                'code' => 'MKD',
 | 
			
		||||
                'symbol' => 'ден',
 | 
			
		||||
                'precision' => '0',
 | 
			
		||||
                'thousand_separator' => '.',
 | 
			
		||||
                'decimal_separator' => ',',
 | 
			
		||||
                'swap_currency_symbol' => true,
 | 
			
		||||
            ],
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
FROM php:8.0-fpm-alpine
 | 
			
		||||
FROM php:7.4-fpm-alpine
 | 
			
		||||
 | 
			
		||||
RUN apk add --no-cache \
 | 
			
		||||
    php8-bcmath
 | 
			
		||||
    php7-bcmath
 | 
			
		||||
 | 
			
		||||
RUN docker-php-ext-install pdo pdo_mysql bcmath
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										483
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										483
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@ -65,13 +65,6 @@
 | 
			
		||||
        "to-fast-properties": "^2.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@esbuild/linux-loong64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "@eslint/eslintrc": {
 | 
			
		||||
      "version": "0.4.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
 | 
			
		||||
@ -221,23 +214,6 @@
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.3.tgz",
 | 
			
		||||
      "integrity": "sha512-xDu17cEfh7Kid/d95kB6tZsLOmSWKCZKtprnhVepjsSaCij+lM3mItSJDuuHDMbCWTh8Ejmebwb+KONcCJ0eXQ=="
 | 
			
		||||
    },
 | 
			
		||||
    "@rvxlab/tailwind-plugin-ios-full-height": {
 | 
			
		||||
      "version": "1.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rvxlab/tailwind-plugin-ios-full-height/-/tailwind-plugin-ios-full-height-1.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-jPIxXn0raN/YTk8nXesqM+JbS2WWd5XaUk/MbaAgVDDPyYtsPfeN3B26xIhSa2oE2+JB66tegPUMSOmixzroXg==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "@stripe/stripe-js": {
 | 
			
		||||
      "version": "1.35.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-1.35.0.tgz",
 | 
			
		||||
      "integrity": "sha512-UIuzpbJqgXCTvJhY/aZYvBtaKdMfQgnIv6kkLlfRJ9smZcC4zoPvq3j7k9wobYI+idHAWP4BRiPnqA8lvzJCtg=="
 | 
			
		||||
    },
 | 
			
		||||
    "@tailwindcss/aspect-ratio": {
 | 
			
		||||
      "version": "0.4.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.0.tgz",
 | 
			
		||||
      "integrity": "sha512-WJu0I4PpqNPuutpaA9zDUq2JXR+lorZ7PbLcKNLmb6GL9/HLfC7w3CRsMhJF4BbYd/lkY6CfXOvkYpuGnZfkpQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "@tailwindcss/forms": {
 | 
			
		||||
      "version": "0.4.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.4.0.tgz",
 | 
			
		||||
@ -247,22 +223,6 @@
 | 
			
		||||
        "mini-svg-data-uri": "^1.2.3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@tailwindcss/line-clamp": {
 | 
			
		||||
      "version": "0.3.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.3.1.tgz",
 | 
			
		||||
      "integrity": "sha512-pNr0T8LAc3TUx/gxCfQZRe9NB2dPEo/cedPHzUGIPxqDMhgjwNm6jYxww4W5l0zAsAddxr+XfZcqttGiFDgrGg=="
 | 
			
		||||
    },
 | 
			
		||||
    "@tailwindcss/typography": {
 | 
			
		||||
      "version": "0.5.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.4.tgz",
 | 
			
		||||
      "integrity": "sha512-QEdg40EmGvE7kKoDei8zr5sf4D1pIayHj4R31bH3lX8x2BtTiR+jNejYPOkhbmy3DXgkMF9jC8xqNiGFAuL9Sg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "lodash.castarray": "^4.4.0",
 | 
			
		||||
        "lodash.isplainobject": "^4.0.6",
 | 
			
		||||
        "lodash.merge": "^4.6.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@tiptap/core": {
 | 
			
		||||
      "version": "2.0.0-beta.99",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.0.0-beta.99.tgz",
 | 
			
		||||
@ -426,11 +386,6 @@
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.0.0-beta.13.tgz",
 | 
			
		||||
      "integrity": "sha512-0EtAwuRldCAoFaL/iXgkRepEeOd55rPg5N4FQUN1xTwZT7PDofukP0DG/2jff/Uj17x4uTaJAa9qlFWuNnDvjw=="
 | 
			
		||||
    },
 | 
			
		||||
    "@tiptap/extension-text-align": {
 | 
			
		||||
      "version": "2.0.0-beta.31",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@tiptap/extension-text-align/-/extension-text-align-2.0.0-beta.31.tgz",
 | 
			
		||||
      "integrity": "sha512-gSJqi57piiMPc2r6WEkXv7ZgQIogigsRUhmlnZC/7s3zzOvjXrexWnV0Ctt/9A7BKcM7OHMykpZyoewvk6QRTw=="
 | 
			
		||||
    },
 | 
			
		||||
    "@tiptap/starter-kit": {
 | 
			
		||||
      "version": "2.0.0-beta.97",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.97.tgz",
 | 
			
		||||
@ -582,12 +537,6 @@
 | 
			
		||||
        "@types/prosemirror-transform": "*"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@vitejs/plugin-vue": {
 | 
			
		||||
      "version": "1.10.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-1.10.2.tgz",
 | 
			
		||||
      "integrity": "sha512-/QJ0Z9qfhAFtKRY+r57ziY4BSbGUTGsPRMpB/Ron3QPwBZM4OZAZHdTa4a8PafCwU5DTatXG8TMDoP8z+oDqJw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "@vue/compiler-core": {
 | 
			
		||||
      "version": "3.2.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.4.tgz",
 | 
			
		||||
@ -609,70 +558,6 @@
 | 
			
		||||
        "@vue/shared": "3.2.4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@vue/compiler-sfc": {
 | 
			
		||||
      "version": "3.2.38",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.38.tgz",
 | 
			
		||||
      "integrity": "sha512-KZjrW32KloMYtTcHAFuw3CqsyWc5X6seb8KbkANSWt3Cz9p2qA8c1GJpSkksFP9ABb6an0FLCFl46ZFXx3kKpg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@babel/parser": "^7.16.4",
 | 
			
		||||
        "@vue/compiler-core": "3.2.38",
 | 
			
		||||
        "@vue/compiler-dom": "3.2.38",
 | 
			
		||||
        "@vue/compiler-ssr": "3.2.38",
 | 
			
		||||
        "@vue/reactivity-transform": "3.2.38",
 | 
			
		||||
        "@vue/shared": "3.2.38",
 | 
			
		||||
        "estree-walker": "^2.0.2",
 | 
			
		||||
        "magic-string": "^0.25.7",
 | 
			
		||||
        "postcss": "^8.1.10",
 | 
			
		||||
        "source-map": "^0.6.1"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@babel/parser": {
 | 
			
		||||
          "version": "7.18.13",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz",
 | 
			
		||||
          "integrity": "sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "@vue/compiler-core": {
 | 
			
		||||
          "version": "3.2.38",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.38.tgz",
 | 
			
		||||
          "integrity": "sha512-/FsvnSu7Z+lkd/8KXMa4yYNUiqQrI22135gfsQYVGuh5tqEgOB0XqrUdb/KnCLa5+TmQLPwvyUnKMyCpu+SX3Q==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "@babel/parser": "^7.16.4",
 | 
			
		||||
            "@vue/shared": "3.2.38",
 | 
			
		||||
            "estree-walker": "^2.0.2",
 | 
			
		||||
            "source-map": "^0.6.1"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "@vue/compiler-dom": {
 | 
			
		||||
          "version": "3.2.38",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.38.tgz",
 | 
			
		||||
          "integrity": "sha512-zqX4FgUbw56kzHlgYuEEJR8mefFiiyR3u96498+zWPsLeh1WKvgIReoNE+U7gG8bCUdvsrJ0JRmev0Ky6n2O0g==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "@vue/compiler-core": "3.2.38",
 | 
			
		||||
            "@vue/shared": "3.2.38"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "@vue/compiler-ssr": {
 | 
			
		||||
          "version": "3.2.38",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.38.tgz",
 | 
			
		||||
          "integrity": "sha512-bm9jOeyv1H3UskNm4S6IfueKjUNFmi2kRweFIGnqaGkkRePjwEcfCVqyS3roe7HvF4ugsEkhf4+kIvDhip6XzQ==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "@vue/compiler-dom": "3.2.38",
 | 
			
		||||
            "@vue/shared": "3.2.38"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "@vue/shared": {
 | 
			
		||||
          "version": "3.2.38",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.38.tgz",
 | 
			
		||||
          "integrity": "sha512-dTyhTIRmGXBjxJE+skC8tTWCGLCVc4wQgRRLt8+O9p5ewBAjoBwtCAkLPrtToSr1xltoe3st21Pv953aOZ7alg==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@vue/compiler-ssr": {
 | 
			
		||||
      "version": "3.2.19",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.19.tgz",
 | 
			
		||||
@ -722,45 +607,6 @@
 | 
			
		||||
        "@vue/shared": "3.2.4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@vue/reactivity-transform": {
 | 
			
		||||
      "version": "3.2.38",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.38.tgz",
 | 
			
		||||
      "integrity": "sha512-3SD3Jmi1yXrDwiNJqQ6fs1x61WsDLqVk4NyKVz78mkaIRh6d3IqtRnptgRfXn+Fzf+m6B1KxBYWq1APj6h4qeA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@babel/parser": "^7.16.4",
 | 
			
		||||
        "@vue/compiler-core": "3.2.38",
 | 
			
		||||
        "@vue/shared": "3.2.38",
 | 
			
		||||
        "estree-walker": "^2.0.2",
 | 
			
		||||
        "magic-string": "^0.25.7"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@babel/parser": {
 | 
			
		||||
          "version": "7.18.13",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz",
 | 
			
		||||
          "integrity": "sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "@vue/compiler-core": {
 | 
			
		||||
          "version": "3.2.38",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.38.tgz",
 | 
			
		||||
          "integrity": "sha512-/FsvnSu7Z+lkd/8KXMa4yYNUiqQrI22135gfsQYVGuh5tqEgOB0XqrUdb/KnCLa5+TmQLPwvyUnKMyCpu+SX3Q==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "@babel/parser": "^7.16.4",
 | 
			
		||||
            "@vue/shared": "3.2.38",
 | 
			
		||||
            "estree-walker": "^2.0.2",
 | 
			
		||||
            "source-map": "^0.6.1"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "@vue/shared": {
 | 
			
		||||
          "version": "3.2.38",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.38.tgz",
 | 
			
		||||
          "integrity": "sha512-dTyhTIRmGXBjxJE+skC8tTWCGLCVc4wQgRRLt8+O9p5ewBAjoBwtCAkLPrtToSr1xltoe3st21Pv953aOZ7alg==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@vue/ref-transform": {
 | 
			
		||||
      "version": "3.2.19",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.19.tgz",
 | 
			
		||||
@ -831,44 +677,6 @@
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.4.tgz",
 | 
			
		||||
      "integrity": "sha512-j2j1MRmjalVKr3YBTxl/BClSIc8UQ8NnPpLYclxerK65JIowI4O7n8O8lElveEtEoHxy1d7BelPUDI0Q4bumqg=="
 | 
			
		||||
    },
 | 
			
		||||
    "@vuelidate/components": {
 | 
			
		||||
      "version": "1.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@vuelidate/components/-/components-1.2.1.tgz",
 | 
			
		||||
      "integrity": "sha512-xaFGcKVQbST0l7yQufuLAbRUwC/5SR4Z8+s7fwF3B1BtQQwlttftAZg1lTm9I30EYsBdslk38XC4z3sDC8Nm4w==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@vuelidate/core": "^2.0.0-alpha.44"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@vuelidate/core": {
 | 
			
		||||
      "version": "2.0.0-alpha.44",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@vuelidate/core/-/core-2.0.0-alpha.44.tgz",
 | 
			
		||||
      "integrity": "sha512-3DlCe3E0RRXbB+OfPacUetKhLmXzmnjeHkzjnbkc03p06mKm6h9pXR5pd6Mv4s4tus4sieuKDb2YWNmKK6rQeA==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "vue-demi": "^0.13.4"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "vue-demi": {
 | 
			
		||||
          "version": "0.13.11",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz",
 | 
			
		||||
          "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A=="
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@vuelidate/validators": {
 | 
			
		||||
      "version": "2.0.0-alpha.31",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@vuelidate/validators/-/validators-2.0.0-alpha.31.tgz",
 | 
			
		||||
      "integrity": "sha512-+MFA9nZ7Y9zCpq383/voPDk/hiAmu6KqiJJhLOYB/FmrUPVoyKnuKnI9Bwiq8ok9GZlVkI8BnIrKPKGj9QpwiQ==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "vue-demi": "^0.13.4"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "vue-demi": {
 | 
			
		||||
          "version": "0.13.11",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz",
 | 
			
		||||
          "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A=="
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@vueuse/core": {
 | 
			
		||||
      "version": "6.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-6.0.0.tgz",
 | 
			
		||||
@ -1432,175 +1240,6 @@
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@esbuild/linux-loong64": "0.14.54",
 | 
			
		||||
        "esbuild-android-64": "0.14.54",
 | 
			
		||||
        "esbuild-android-arm64": "0.14.54",
 | 
			
		||||
        "esbuild-darwin-64": "0.14.54",
 | 
			
		||||
        "esbuild-darwin-arm64": "0.14.54",
 | 
			
		||||
        "esbuild-freebsd-64": "0.14.54",
 | 
			
		||||
        "esbuild-freebsd-arm64": "0.14.54",
 | 
			
		||||
        "esbuild-linux-32": "0.14.54",
 | 
			
		||||
        "esbuild-linux-64": "0.14.54",
 | 
			
		||||
        "esbuild-linux-arm": "0.14.54",
 | 
			
		||||
        "esbuild-linux-arm64": "0.14.54",
 | 
			
		||||
        "esbuild-linux-mips64le": "0.14.54",
 | 
			
		||||
        "esbuild-linux-ppc64le": "0.14.54",
 | 
			
		||||
        "esbuild-linux-riscv64": "0.14.54",
 | 
			
		||||
        "esbuild-linux-s390x": "0.14.54",
 | 
			
		||||
        "esbuild-netbsd-64": "0.14.54",
 | 
			
		||||
        "esbuild-openbsd-64": "0.14.54",
 | 
			
		||||
        "esbuild-sunos-64": "0.14.54",
 | 
			
		||||
        "esbuild-windows-32": "0.14.54",
 | 
			
		||||
        "esbuild-windows-64": "0.14.54",
 | 
			
		||||
        "esbuild-windows-arm64": "0.14.54"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-android-64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-android-arm64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-darwin-64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-darwin-arm64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-freebsd-64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-freebsd-arm64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-linux-32": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-linux-64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-linux-arm": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-linux-arm64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-linux-mips64le": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-linux-ppc64le": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-linux-riscv64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-linux-s390x": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-netbsd-64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-openbsd-64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-sunos-64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-windows-32": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-windows-64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "esbuild-windows-arm64": {
 | 
			
		||||
      "version": "0.14.54",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz",
 | 
			
		||||
      "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "escalade": {
 | 
			
		||||
      "version": "3.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
 | 
			
		||||
@ -2308,24 +1947,12 @@
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
 | 
			
		||||
      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
 | 
			
		||||
    },
 | 
			
		||||
    "lodash.castarray": {
 | 
			
		||||
      "version": "4.4.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
 | 
			
		||||
      "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "lodash.clonedeep": {
 | 
			
		||||
      "version": "4.5.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
 | 
			
		||||
      "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "lodash.isplainobject": {
 | 
			
		||||
      "version": "4.0.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
 | 
			
		||||
      "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "lodash.merge": {
 | 
			
		||||
      "version": "4.6.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
 | 
			
		||||
@ -2578,22 +2205,6 @@
 | 
			
		||||
      "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "pinia": {
 | 
			
		||||
      "version": "2.0.21",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.21.tgz",
 | 
			
		||||
      "integrity": "sha512-6ol04PtL29O0Z6JHI47O3JUSoyOJ7Og0rstXrHVMZSP4zAldsQBXJCNF0i/H7m8vp/Hjd/CSmuPl7C5QAwpeWQ==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@vue/devtools-api": "^6.2.1",
 | 
			
		||||
        "vue-demi": "*"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@vue/devtools-api": {
 | 
			
		||||
          "version": "6.2.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.2.1.tgz",
 | 
			
		||||
          "integrity": "sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ=="
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "postcss": {
 | 
			
		||||
      "version": "8.4.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
 | 
			
		||||
@ -2897,15 +2508,6 @@
 | 
			
		||||
        "glob": "^7.1.3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "rollup": {
 | 
			
		||||
      "version": "2.78.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz",
 | 
			
		||||
      "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "fsevents": "~2.3.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "rope-sequence": {
 | 
			
		||||
      "version": "1.3.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.2.tgz",
 | 
			
		||||
@ -3066,12 +2668,6 @@
 | 
			
		||||
        "has-flag": "^3.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "supports-preserve-symlinks-flag": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "table": {
 | 
			
		||||
      "version": "6.7.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz",
 | 
			
		||||
@ -3338,86 +2934,12 @@
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/v-money3/-/v-money3-3.16.1.tgz",
 | 
			
		||||
      "integrity": "sha512-U0GjmdybvEwfxCpZiTUbKugSglJbX6wxlyMeg0YJdLTAKlnjMRDph3hpNJlTlg5Gs8MQRpDVdaLysBjV749HLg=="
 | 
			
		||||
    },
 | 
			
		||||
    "v-tooltip": {
 | 
			
		||||
      "version": "4.0.0-beta.17",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/v-tooltip/-/v-tooltip-4.0.0-beta.17.tgz",
 | 
			
		||||
      "integrity": "sha512-d7v/6KEXQOtcj3NT3Z1LpbDv8SBh8JgbsD+3s/zGIGCxiXC2SoVW6wGV4X0MlCo97PiosibcSe+VKbFiy4AKnQ==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@popperjs/core": "^2.11.0",
 | 
			
		||||
        "vue-resize": "^2.0.0-alpha.1"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@popperjs/core": {
 | 
			
		||||
          "version": "2.11.6",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz",
 | 
			
		||||
          "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw=="
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "v8-compile-cache": {
 | 
			
		||||
      "version": "2.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "vite": {
 | 
			
		||||
      "version": "2.9.13",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.13.tgz",
 | 
			
		||||
      "integrity": "sha512-AsOBAaT0AD7Mhe8DuK+/kE4aWYFMx/i0ZNi98hJclxb4e0OhQcZYUrvLjIaQ8e59Ui7txcvKMiJC1yftqpQoDw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "esbuild": "^0.14.27",
 | 
			
		||||
        "fsevents": "~2.3.2",
 | 
			
		||||
        "postcss": "^8.4.13",
 | 
			
		||||
        "resolve": "^1.22.0",
 | 
			
		||||
        "rollup": "^2.59.0"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "is-core-module": {
 | 
			
		||||
          "version": "2.10.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
 | 
			
		||||
          "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "has": "^1.0.3"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "nanoid": {
 | 
			
		||||
          "version": "3.3.4",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
 | 
			
		||||
          "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "postcss": {
 | 
			
		||||
          "version": "8.4.16",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz",
 | 
			
		||||
          "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "nanoid": "^3.3.4",
 | 
			
		||||
            "picocolors": "^1.0.0",
 | 
			
		||||
            "source-map-js": "^1.0.2"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "resolve": {
 | 
			
		||||
          "version": "1.22.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
 | 
			
		||||
          "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "is-core-module": "^2.9.0",
 | 
			
		||||
            "path-parse": "^1.0.7",
 | 
			
		||||
            "supports-preserve-symlinks-flag": "^1.0.0"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "source-map-js": {
 | 
			
		||||
          "version": "1.0.2",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
 | 
			
		||||
          "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "vue": {
 | 
			
		||||
      "version": "3.2.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.4.tgz",
 | 
			
		||||
@ -3480,11 +3002,6 @@
 | 
			
		||||
        "@vue/devtools-api": "^6.0.0-beta.7"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "vue-resize": {
 | 
			
		||||
      "version": "2.0.0-alpha.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz",
 | 
			
		||||
      "integrity": "sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg=="
 | 
			
		||||
    },
 | 
			
		||||
    "vue-router": {
 | 
			
		||||
      "version": "4.0.11",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.0.11.tgz",
 | 
			
		||||
 | 
			
		||||
@ -24,7 +24,7 @@
 | 
			
		||||
    "sass": "^1.32.12",
 | 
			
		||||
    "tailwind-scrollbar": "^1.3.1",
 | 
			
		||||
    "tailwindcss": "^3.0.6",
 | 
			
		||||
    "vite": "^2.9.13"
 | 
			
		||||
    "vite": "^2.6.1"
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@headlessui/vue": "^1.4.0",
 | 
			
		||||
@ -33,7 +33,6 @@
 | 
			
		||||
    "@stripe/stripe-js": "^1.21.2",
 | 
			
		||||
    "@tailwindcss/line-clamp": "^0.3.0",
 | 
			
		||||
    "@tiptap/core": "^2.0.0-beta.85",
 | 
			
		||||
    "@tiptap/extension-text-align": "^2.0.0-beta.29",
 | 
			
		||||
    "@tiptap/starter-kit": "^2.0.0-beta.81",
 | 
			
		||||
    "@tiptap/vue-3": "^2.0.0-beta.38",
 | 
			
		||||
    "@vuelidate/components": "^1.1.12",
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								public/build/assets/404.5c5416a6.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								public/build/assets/404.5c5416a6.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
import{G as u,aN as d,k as m,r as n,o as h,e as p,h as s,t as o,f as c,w as f,i as _,u as x}from"./vendor.01d0adc5.js";const g={class:"w-full h-screen h-screen-ios"},w={class:"flex items-center justify-center w-full h-full"},y={class:"flex flex-col items-center justify-center"},b={class:"text-primary-500",style:{"font-size":"10rem"}},v={class:"mb-10 text-3xl text-primary-500"},$={setup(k){const e=u();d();const l=m(()=>{if(e.path.indexOf("customer")>-1&&e.params.company)return`/${e.params.company}/customer/dashboard`;if(e.params.catchAll){let a=e.params.catchAll.indexOf("/");return a>-1?`/${e.params.catchAll.substring(a,0)}/customer/dashboard`:"/"}else return"/admin/dashboard"});return(t,a)=>{const r=n("BaseIcon"),i=n("router-link");return h(),p("div",g,[s("div",w,[s("div",y,[s("h1",b,o(t.$t("general.four_zero_four")),1),s("h5",v,o(t.$t("general.you_got_lost")),1),c(i,{class:"flex items-center w-32 h-12 px-3 py-1 text-base font-medium leading-none text-center text-white rounded whitespace-nowrap bg-primary-500 btn-lg hover:text-white",to:x(l)},{default:f(()=>[c(r,{name:"ArrowLeftIcon",class:"mr-2 text-white icon"}),_(" "+o(t.$t("general.go_home")),1)]),_:1},8,["to"])])])])}}};export{$ as default};
 | 
			
		||||
@ -1 +0,0 @@
 | 
			
		||||
import{G as u,aN as d,k as m,r as n,o as h,e as p,h as s,t as o,f as c,w as f,i as _,u as x}from"./vendor.d12b5734.js";const g={class:"w-full h-screen"},w={class:"flex items-center justify-center w-full h-full"},y={class:"flex flex-col items-center justify-center"},b={class:"text-primary-500",style:{"font-size":"10rem"}},v={class:"mb-10 text-3xl text-primary-500"},$={setup(k){const e=u();d();const l=m(()=>{if(e.path.indexOf("customer")>-1&&e.params.company)return`/${e.params.company}/customer/dashboard`;if(e.params.catchAll){let a=e.params.catchAll.indexOf("/");return a>-1?`/${e.params.catchAll.substring(a,0)}/customer/dashboard`:"/"}else return"/admin/dashboard"});return(t,a)=>{const r=n("BaseIcon"),i=n("router-link");return h(),p("div",g,[s("div",w,[s("div",y,[s("h1",b,o(t.$t("general.four_zero_four")),1),s("h5",v,o(t.$t("general.you_got_lost")),1),c(i,{class:"flex items-center w-32 h-12 px-3 py-1 text-base font-medium leading-none text-center text-white rounded whitespace-nowrap bg-primary-500 btn-lg hover:text-white",to:x(l)},{default:f(()=>[c(r,{name:"ArrowLeftIcon",class:"mr-2 text-white icon"}),_(" "+o(t.$t("general.go_home")),1)]),_:1},8,["to"])])])])}}};export{$ as default};
 | 
			
		||||
@ -1 +0,0 @@
 | 
			
		||||
var L=Object.defineProperty,P=Object.defineProperties;var T=Object.getOwnPropertyDescriptors;var V=Object.getOwnPropertySymbols;var z=Object.prototype.hasOwnProperty,E=Object.prototype.propertyIsEnumerable;var U=(u,s,i)=>s in u?L(u,s,{enumerable:!0,configurable:!0,writable:!0,value:i}):u[s]=i,S=(u,s)=>{for(var i in s||(s={}))z.call(s,i)&&U(u,i,s[i]);if(V)for(var i of V(s))E.call(s,i)&&U(u,i,s[i]);return u},I=(u,s)=>P(u,T(s));import{J,B as b,k as y,L as _,M as C,Q,N as H,P as K,a0 as O,T as W,r as m,o as M,e as X,f as r,w as d,u as e,x as Y,l as Z,m as x,j as ee,i as ae,t as se,U as te,h as ne}from"./vendor.d12b5734.js";import{e as oe,d as re,b as le}from"./main.465728e1.js";const ie=["onSubmit"],ue=ne("span",null,null,-1),ce={setup(u){const s=oe(),i=re(),F=le(),{t:v}=J();let p=b(!1),c=b(null),f=b([]);const $=b(!1);s.currentUser.avatar&&f.value.push({image:s.currentUser.avatar});const q=y(()=>({name:{required:_.withMessage(v("validation.required"),C)},email:{required:_.withMessage(v("validation.required"),C),email:_.withMessage(v("validation.email_incorrect"),Q)},password:{minLength:_.withMessage(v("validation.password_length",{count:8}),H(8))},confirm_password:{sameAsPassword:_.withMessage(v("validation.password_incorrect"),K(t.password))}})),t=O({name:s.currentUser.name,email:s.currentUser.email,language:s.currentUserSettings.language||F.selectedCompanySettings.language,password:"",confirm_password:""}),o=W(q,y(()=>t));function k(l,a){c.value=a}function N(){c.value=null,$.value=!0}async function A(){if(o.value.$touch(),o.value.$invalid)return!0;p.value=!0;let l={name:t.name,email:t.email};try{if(t.password!=null&&t.password!==void 0&&t.password!==""&&(l=I(S({},l),{password:t.password})),s.currentUserSettings.language!==t.language&&await s.updateUserSettings({settings:{language:t.language}}),(await s.updateCurrentUser(l)).data.data){if(p.value=!1,c.value||$.value){let w=new FormData;c.value&&w.append("admin_avatar",c.value),w.append("is_admin_avatar_removed",$.value),await s.uploadAvatar(w),c.value=null,$.value=!1}t.password="",t.confirm_password=""}}catch{return p.value=!1,!0}}return(l,a)=>{const w=m("BaseFileUploader"),g=m("BaseInputGroup"),B=m("BaseInput"),G=m("BaseMultiselect"),D=m("BaseInputGrid"),R=m("BaseIcon"),h=m("BaseButton"),j=m("BaseSettingCard");return M(),X("form",{class:"relative",onSubmit:te(A,["prevent"])},[r(j,{title:l.$t("settings.account_settings.account_settings"),description:l.$t("settings.account_settings.section_description")},{default:d(()=>[r(D,null,{default:d(()=>[r(g,{label:l.$tc("settings.account_settings.profile_picture")},{default:d(()=>[r(w,{modelValue:e(f),"onUpdate:modelValue":a[0]||(a[0]=n=>Y(f)?f.value=n:f=n),avatar:!0,accept:"image/*",onChange:k,onRemove:N},null,8,["modelValue"])]),_:1},8,["label"]),ue,r(g,{label:l.$tc("settings.account_settings.name"),error:e(o).name.$error&&e(o).name.$errors[0].$message,required:""},{default:d(()=>[r(B,{modelValue:e(t).name,"onUpdate:modelValue":a[1]||(a[1]=n=>e(t).name=n),invalid:e(o).name.$error,onInput:a[2]||(a[2]=n=>e(o).name.$touch())},null,8,["modelValue","invalid"])]),_:1},8,["label","error"]),r(g,{label:l.$tc("settings.account_settings.email"),error:e(o).email.$error&&e(o).email.$errors[0].$message,required:""},{default:d(()=>[r(B,{modelValue:e(t).email,"onUpdate:modelValue":a[3]||(a[3]=n=>e(t).email=n),invalid:e(o).email.$error,onInput:a[4]||(a[4]=n=>e(o).email.$touch())},null,8,["modelValue","invalid"])]),_:1},8,["label","error"]),r(g,{error:e(o).password.$error&&e(o).password.$errors[0].$message,label:l.$tc("settings.account_settings.password")},{default:d(()=>[r(B,{modelValue:e(t).password,"onUpdate:modelValue":a[5]||(a[5]=n=>e(t).password=n),type:"password",onInput:a[6]||(a[6]=n=>e(o).password.$touch())},null,8,["modelValue"])]),_:1},8,["error","label"]),r(g,{label:l.$tc("settings.account_settings.confirm_password"),error:e(o).confirm_password.$error&&e(o).confirm_password.$errors[0].$message},{default:d(()=>[r(B,{modelValue:e(t).confirm_password,"onUpdate:modelValue":a[7]||(a[7]=n=>e(t).confirm_password=n),type:"password",onInput:a[8]||(a[8]=n=>e(o).confirm_password.$touch())},null,8,["modelValue"])]),_:1},8,["label","error"]),r(g,{label:l.$tc("settings.language")},{default:d(()=>[r(G,{modelValue:e(t).language,"onUpdate:modelValue":a[9]||(a[9]=n=>e(t).language=n),options:e(i).config.languages,label:"name","value-prop":"code","track-by":"name","open-direction":"top"},null,8,["modelValue","options"])]),_:1},8,["label"])]),_:1}),r(h,{loading:e(p),disabled:e(p),class:"mt-6"},{left:d(n=>[e(p)?ee("",!0):(M(),Z(R,{key:0,name:"SaveIcon",class:x(n.class)},null,8,["class"]))]),default:d(()=>[ae(" "+se(l.$tc("settings.company_info.save")),1)]),_:1},8,["loading","disabled"])]),_:1},8,["title","description"])],40,ie)}}};export{ce as default};
 | 
			
		||||
							
								
								
									
										1
									
								
								public/build/assets/AccountSetting.d3009f2e.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								public/build/assets/AccountSetting.d3009f2e.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
var L=Object.defineProperty,R=Object.defineProperties;var P=Object.getOwnPropertyDescriptors;var V=Object.getOwnPropertySymbols;var T=Object.prototype.hasOwnProperty,z=Object.prototype.propertyIsEnumerable;var b=(u,s,i)=>s in u?L(u,s,{enumerable:!0,configurable:!0,writable:!0,value:i}):u[s]=i,U=(u,s)=>{for(var i in s||(s={}))T.call(s,i)&&b(u,i,s[i]);if(V)for(var i of V(s))z.call(s,i)&&b(u,i,s[i]);return u},S=(u,s)=>R(u,P(s));import{J as E,B,k as I,L as v,M as y,Q as J,N as Q,P as H,a0 as K,T as O,r as m,o as C,e as W,f as r,w as d,u as e,x as X,l as Y,m as Z,j as x,i as ee,t as ae,U as se,h as te}from"./vendor.01d0adc5.js";import{e as ne,d as oe,b as re}from"./main.75722495.js";const le=["onSubmit"],ie=te("span",null,null,-1),pe={setup(u){const s=ne(),i=oe(),M=re(),{t:g}=E();let p=B(!1),w=B(null),f=B([]);s.currentUser.avatar&&f.value.push({image:s.currentUser.avatar});const F=I(()=>({name:{required:v.withMessage(g("validation.required"),y)},email:{required:v.withMessage(g("validation.required"),y),email:v.withMessage(g("validation.email_incorrect"),J)},password:{minLength:v.withMessage(g("validation.password_length",{count:8}),Q(8))},confirm_password:{sameAsPassword:v.withMessage(g("validation.password_incorrect"),H(t.password))}})),t=K({name:s.currentUser.name,email:s.currentUser.email,language:s.currentUserSettings.language||M.selectedCompanySettings.language,password:"",confirm_password:""}),o=O(F,I(()=>t));function q(l,a){w.value=a}function k(){w.value=null}async function N(){if(o.value.$touch(),o.value.$invalid)return!0;p.value=!0;let l={name:t.name,email:t.email};try{if(t.password!=null&&t.password!==void 0&&t.password!==""&&(l=S(U({},l),{password:t.password})),s.currentUserSettings.language!==t.language&&await s.updateUserSettings({settings:{language:t.language}}),(await s.updateCurrentUser(l)).data.data){if(p.value=!1,w.value){let $=new FormData;$.append("admin_avatar",w.value),await s.uploadAvatar($)}t.password="",t.confirm_password=""}}catch{return p.value=!1,!0}}return(l,a)=>{const $=m("BaseFileUploader"),c=m("BaseInputGroup"),_=m("BaseInput"),G=m("BaseMultiselect"),D=m("BaseInputGrid"),h=m("BaseIcon"),j=m("BaseButton"),A=m("BaseSettingCard");return C(),W("form",{class:"relative",onSubmit:se(N,["prevent"])},[r(A,{title:l.$t("settings.account_settings.account_settings"),description:l.$t("settings.account_settings.section_description")},{default:d(()=>[r(D,null,{default:d(()=>[r(c,{label:l.$tc("settings.account_settings.profile_picture")},{default:d(()=>[r($,{modelValue:e(f),"onUpdate:modelValue":a[0]||(a[0]=n=>X(f)?f.value=n:f=n),avatar:!0,accept:"image/*",onChange:q,onRemove:k},null,8,["modelValue"])]),_:1},8,["label"]),ie,r(c,{label:l.$tc("settings.account_settings.name"),error:e(o).name.$error&&e(o).name.$errors[0].$message,required:""},{default:d(()=>[r(_,{modelValue:e(t).name,"onUpdate:modelValue":a[1]||(a[1]=n=>e(t).name=n),invalid:e(o).name.$error,onInput:a[2]||(a[2]=n=>e(o).name.$touch())},null,8,["modelValue","invalid"])]),_:1},8,["label","error"]),r(c,{label:l.$tc("settings.account_settings.email"),error:e(o).email.$error&&e(o).email.$errors[0].$message,required:""},{default:d(()=>[r(_,{modelValue:e(t).email,"onUpdate:modelValue":a[3]||(a[3]=n=>e(t).email=n),invalid:e(o).email.$error,onInput:a[4]||(a[4]=n=>e(o).email.$touch())},null,8,["modelValue","invalid"])]),_:1},8,["label","error"]),r(c,{error:e(o).password.$error&&e(o).password.$errors[0].$message,label:l.$tc("settings.account_settings.password")},{default:d(()=>[r(_,{modelValue:e(t).password,"onUpdate:modelValue":a[5]||(a[5]=n=>e(t).password=n),type:"password",onInput:a[6]||(a[6]=n=>e(o).password.$touch())},null,8,["modelValue"])]),_:1},8,["error","label"]),r(c,{label:l.$tc("settings.account_settings.confirm_password"),error:e(o).confirm_password.$error&&e(o).confirm_password.$errors[0].$message},{default:d(()=>[r(_,{modelValue:e(t).confirm_password,"onUpdate:modelValue":a[7]||(a[7]=n=>e(t).confirm_password=n),type:"password",onInput:a[8]||(a[8]=n=>e(o).confirm_password.$touch())},null,8,["modelValue"])]),_:1},8,["label","error"]),r(c,{label:l.$tc("settings.language")},{default:d(()=>[r(G,{modelValue:e(t).language,"onUpdate:modelValue":a[9]||(a[9]=n=>e(t).language=n),options:e(i).config.languages,label:"name","value-prop":"code","track-by":"code","open-direction":"top"},null,8,["modelValue","options"])]),_:1},8,["label"])]),_:1}),r(j,{loading:e(p),disabled:e(p),class:"mt-6"},{left:d(n=>[e(p)?x("",!0):(C(),Y(h,{key:0,name:"SaveIcon",class:Z(n.class)},null,8,["class"]))]),default:d(()=>[ee(" "+ae(l.$tc("settings.company_info.save")),1)]),_:1},8,["loading","disabled"])]),_:1},8,["title","description"])],40,le)}}};export{pe as default};
 | 
			
		||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/build/assets/BackupSetting.f5a6fab0.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								public/build/assets/BackupSetting.f5a6fab0.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -1 +0,0 @@
 | 
			
		||||
import{_ as o}from"./main.465728e1.js";import{o as n,e as i,g as l,k as c,r as d,l as m,w as _,j as f,h as $,t as h,s as B}from"./vendor.d12b5734.js";const k={name:"List"},v={class:"list-none"};function x(e,r,t,s,a,p){return n(),i("div",v,[l(e.$slots,"default")])}var L=o(k,[["render",x]]);const y={name:"ListItem",props:{title:{type:String,required:!1,default:""},active:{type:Boolean,required:!0},index:{type:Number,default:null}},setup(e,{slots:r}){const t="cursor-pointer pb-2 pr-0 text-sm font-medium leading-5  flex items-center";let s=c(()=>!!r.icon),a=c(()=>e.active?`${t} text-primary-500`:`${t} text-gray-500`);return{hasIconSlot:s,containerClass:a}}},g={key:0,class:"mr-3"};function C(e,r,t,s,a,p){const u=d("router-link");return n(),m(u,B(e.$attrs,{class:s.containerClass}),{default:_(()=>[s.hasIconSlot?(n(),i("span",g,[l(e.$slots,"icon")])):f("",!0),$("span",null,h(t.title),1)]),_:3},16,["class"])}var b=o(y,[["render",C]]);export{b as B,L as a};
 | 
			
		||||
							
								
								
									
										1
									
								
								public/build/assets/BaseListItem.4eea691c.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								public/build/assets/BaseListItem.4eea691c.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
import{_ as o}from"./main.75722495.js";import{o as n,e as c,g as i,k as l,r as u,l as m,w as _,j as f,h as $,t as h,s as B}from"./vendor.01d0adc5.js";const k={name:"List"},v={class:"list-none"};function x(e,r,t,s,a,d){return n(),c("div",v,[i(e.$slots,"default")])}var L=o(k,[["render",x]]);const y={name:"ListItem",props:{title:{type:String,required:!1,default:""},active:{type:Boolean,required:!0},index:{type:Number,default:null}},setup(e,{slots:r}){const t="cursor-pointer pb-2 pr-0 text-sm font-medium leading-5  flex items-center";let s=l(()=>!!r.icon),a=l(()=>e.active?`${t} text-primary-500`:`${t} text-gray-500`);return{hasIconSlot:s,containerClass:a}}},g={key:0,class:"mr-3"};function C(e,r,t,s,a,d){const p=u("router-link");return n(),m(p,B(e.$attrs,{class:s.containerClass}),{default:_(()=>[s.hasIconSlot?(n(),c("span",g,[i(e.$slots,"icon")])):f("",!0),$("span",null,h(t.title),1)]),_:3},16,["class"])}var j=o(y,[["render",C]]);export{j as B,L as a};
 | 
			
		||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -1 +1 @@
 | 
			
		||||
import{J as j,B as k,k as g,L as y,M as N,N as L,S as T,T as q,r as i,o as B,l as b,w as r,h as m,i as f,t as C,u as e,f as n,m as D,j as G,U}from"./vendor.d12b5734.js";import{u as z}from"./category.c88b90cd.js";import{c as E}from"./main.465728e1.js";const A={class:"flex justify-between w-full"},J=["onSubmit"],X={class:"p-8 sm:p-6"},F={class:"z-0 flex justify-end p-4 border-t border-gray-200 border-solid border-modal-bg"},Q={setup(H){const t=z(),u=E(),{t:p}=j();let c=k(!1);const h=g(()=>({currentCategory:{name:{required:y.withMessage(p("validation.required"),N),minLength:y.withMessage(p("validation.name_min_length",{count:3}),L(3))},description:{maxLength:y.withMessage(p("validation.description_maxlength",{count:255}),T(255))}}})),o=q(h,g(()=>t)),w=g(()=>u.active&&u.componentName==="CategoryModal");async function I(){if(o.value.currentCategory.$touch(),o.value.currentCategory.$invalid)return!0;const s=t.isEdit?t.updateCategory:t.addCategory;c.value=!0,await s(t.currentCategory),c.value=!1,u.refreshData&&u.refreshData(),d()}function d(){u.closeModal(),setTimeout(()=>{t.$reset(),o.value.$reset()},300)}return(s,a)=>{const v=i("BaseIcon"),x=i("BaseInput"),_=i("BaseInputGroup"),M=i("BaseTextarea"),V=i("BaseInputGrid"),$=i("BaseButton"),S=i("BaseModal");return B(),b(S,{show:e(w),onClose:d},{header:r(()=>[m("div",A,[f(C(e(u).title)+" ",1),n(v,{name:"XIcon",class:"w-6 h-6 text-gray-500 cursor-pointer",onClick:d})])]),default:r(()=>[m("form",{action:"",onSubmit:U(I,["prevent"])},[m("div",X,[n(V,{layout:"one-column"},{default:r(()=>[n(_,{label:s.$t("expenses.category"),error:e(o).currentCategory.name.$error&&e(o).currentCategory.name.$errors[0].$message,required:""},{default:r(()=>[n(x,{modelValue:e(t).currentCategory.name,"onUpdate:modelValue":a[0]||(a[0]=l=>e(t).currentCategory.name=l),invalid:e(o).currentCategory.name.$error,type:"text",onInput:a[1]||(a[1]=l=>e(o).currentCategory.name.$touch())},null,8,["modelValue","invalid"])]),_:1},8,["label","error"]),n(_,{label:s.$t("expenses.description"),error:e(o).currentCategory.description.$error&&e(o).currentCategory.description.$errors[0].$message},{default:r(()=>[n(M,{modelValue:e(t).currentCategory.description,"onUpdate:modelValue":a[2]||(a[2]=l=>e(t).currentCategory.description=l),rows:"4",cols:"50",onInput:a[3]||(a[3]=l=>e(o).currentCategory.description.$touch())},null,8,["modelValue"])]),_:1},8,["label","error"])]),_:1})]),m("div",F,[n($,{type:"button",variant:"primary-outline",class:"mr-3 text-sm",onClick:d},{default:r(()=>[f(C(s.$t("general.cancel")),1)]),_:1}),n($,{loading:e(c),disabled:e(c),variant:"primary",type:"submit"},{left:r(l=>[e(c)?G("",!0):(B(),b(v,{key:0,name:"SaveIcon",class:D(l.class)},null,8,["class"]))]),default:r(()=>[f(" "+C(e(t).isEdit?s.$t("general.update"):s.$t("general.save")),1)]),_:1},8,["loading","disabled"])])],40,J)]),_:1},8,["show"])}}};export{Q as _};
 | 
			
		||||
import{J as j,B as k,k as g,L as y,M as N,N as L,S as T,T as q,r as i,o as B,l as b,w as r,h as m,i as f,t as C,u as e,f as n,m as D,j as G,U}from"./vendor.01d0adc5.js";import{u as z}from"./category.4b37f0ed.js";import{c as E}from"./main.75722495.js";const A={class:"flex justify-between w-full"},J=["onSubmit"],X={class:"p-8 sm:p-6"},F={class:"z-0 flex justify-end p-4 border-t border-gray-200 border-solid border-modal-bg"},Q={setup(H){const t=z(),u=E(),{t:p}=j();let c=k(!1);const h=g(()=>({currentCategory:{name:{required:y.withMessage(p("validation.required"),N),minLength:y.withMessage(p("validation.name_min_length",{count:3}),L(3))},description:{maxLength:y.withMessage(p("validation.description_maxlength",{count:255}),T(255))}}})),o=q(h,g(()=>t)),w=g(()=>u.active&&u.componentName==="CategoryModal");async function I(){if(o.value.currentCategory.$touch(),o.value.currentCategory.$invalid)return!0;const s=t.isEdit?t.updateCategory:t.addCategory;c.value=!0,await s(t.currentCategory),c.value=!1,u.refreshData&&u.refreshData(),d()}function d(){u.closeModal(),setTimeout(()=>{t.$reset(),o.value.$reset()},300)}return(s,a)=>{const v=i("BaseIcon"),x=i("BaseInput"),_=i("BaseInputGroup"),M=i("BaseTextarea"),V=i("BaseInputGrid"),$=i("BaseButton"),S=i("BaseModal");return B(),b(S,{show:e(w),onClose:d},{header:r(()=>[m("div",A,[f(C(e(u).title)+" ",1),n(v,{name:"XIcon",class:"w-6 h-6 text-gray-500 cursor-pointer",onClick:d})])]),default:r(()=>[m("form",{action:"",onSubmit:U(I,["prevent"])},[m("div",X,[n(V,{layout:"one-column"},{default:r(()=>[n(_,{label:s.$t("expenses.category"),error:e(o).currentCategory.name.$error&&e(o).currentCategory.name.$errors[0].$message,required:""},{default:r(()=>[n(x,{modelValue:e(t).currentCategory.name,"onUpdate:modelValue":a[0]||(a[0]=l=>e(t).currentCategory.name=l),invalid:e(o).currentCategory.name.$error,type:"text",onInput:a[1]||(a[1]=l=>e(o).currentCategory.name.$touch())},null,8,["modelValue","invalid"])]),_:1},8,["label","error"]),n(_,{label:s.$t("expenses.description"),error:e(o).currentCategory.description.$error&&e(o).currentCategory.description.$errors[0].$message},{default:r(()=>[n(M,{modelValue:e(t).currentCategory.description,"onUpdate:modelValue":a[2]||(a[2]=l=>e(t).currentCategory.description=l),rows:"4",cols:"50",onInput:a[3]||(a[3]=l=>e(o).currentCategory.description.$touch())},null,8,["modelValue"])]),_:1},8,["label","error"])]),_:1})]),m("div",F,[n($,{type:"button",variant:"primary-outline",class:"mr-3 text-sm",onClick:d},{default:r(()=>[f(C(s.$t("general.cancel")),1)]),_:1}),n($,{loading:e(c),disabled:e(c),variant:"primary",type:"submit"},{left:r(l=>[e(c)?G("",!0):(B(),b(v,{key:0,name:"SaveIcon",class:D(l.class)},null,8,["class"]))]),default:r(()=>[f(" "+C(e(t).isEdit?s.$t("general.update"):s.$t("general.save")),1)]),_:1},8,["loading","disabled"])])],40,J)]),_:1},8,["show"])}}};export{Q as _};
 | 
			
		||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/build/assets/CompanyInfoSettings.a1bb8458.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								public/build/assets/CompanyInfoSettings.a1bb8458.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/build/assets/Create.a722899f.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								public/build/assets/Create.a722899f.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/build/assets/Create.be897594.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								public/build/assets/Create.be897594.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -1 +1 @@
 | 
			
		||||
var I=Object.defineProperty,b=Object.defineProperties;var g=Object.getOwnPropertyDescriptors;var y=Object.getOwnPropertySymbols;var q=Object.prototype.hasOwnProperty,h=Object.prototype.propertyIsEnumerable;var f=(e,t,r)=>t in e?I(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,_=(e,t)=>{for(var r in t||(t={}))q.call(t,r)&&f(e,r,t[r]);if(y)for(var r of y(t))h.call(t,r)&&f(e,r,t[r]);return e},v=(e,t)=>b(e,g(t));import{J as j,L as w,O as V,T as L,k as T,aE as F,r as E,o as n,l as m,w as P,aj as O,u as c,_ as S,C as x,e as D,f as A,F as R,y as k,j as B,I as C}from"./vendor.d12b5734.js";import{o as i,m as Y}from"./main.465728e1.js";function $(e){switch(e){case"./types/DateTimeType.vue":return i(()=>import("./DateTimeType.6886ff98.js"),["assets/DateTimeType.6886ff98.js","assets/vendor.d12b5734.js"]);case"./types/DateType.vue":return i(()=>import("./DateType.12fc8765.js"),["assets/DateType.12fc8765.js","assets/vendor.d12b5734.js"]);case"./types/DropdownType.vue":return i(()=>import("./DropdownType.2d01b840.js"),["assets/DropdownType.2d01b840.js","assets/vendor.d12b5734.js"]);case"./types/InputType.vue":return i(()=>import("./InputType.cf0dfc7c.js"),["assets/InputType.cf0dfc7c.js","assets/vendor.d12b5734.js"]);case"./types/NumberType.vue":return i(()=>import("./NumberType.7b73360f.js"),["assets/NumberType.7b73360f.js","assets/vendor.d12b5734.js"]);case"./types/PhoneType.vue":return i(()=>import("./PhoneType.29ae66c8.js"),["assets/PhoneType.29ae66c8.js","assets/vendor.d12b5734.js"]);case"./types/SwitchType.vue":return i(()=>import("./SwitchType.591a8b07.js"),["assets/SwitchType.591a8b07.js","assets/vendor.d12b5734.js"]);case"./types/TextAreaType.vue":return i(()=>import("./TextAreaType.27565abe.js"),["assets/TextAreaType.27565abe.js","assets/vendor.d12b5734.js"]);case"./types/TimeType.vue":return i(()=>import("./TimeType.8ac8afd1.js"),["assets/TimeType.8ac8afd1.js","assets/vendor.d12b5734.js"]);case"./types/UrlType.vue":return i(()=>import("./UrlType.d123ab64.js"),["assets/UrlType.d123ab64.js","assets/vendor.d12b5734.js"]);default:return new Promise(function(t,r){(typeof queueMicrotask=="function"?queueMicrotask:setTimeout)(r.bind(null,new Error("Unknown variable dynamic import: "+e)))})}}const M={props:{field:{type:Object,required:!0},customFieldScope:{type:String,required:!0},index:{type:Number,required:!0},store:{type:Object,required:!0},storeProp:{type:String,required:!0}},setup(e){const t=e,{t:r}=j(),d={value:{required:w.withMessage(r("validation.required"),V(t.field.is_required))}},a=L(d,T(()=>t.field),{$scope:t.customFieldScope}),o=T(()=>t.field.type?F(()=>$(`./types/${t.field.type}Type.vue`)):!1);return(u,s)=>{const l=E("BaseInputGroup");return n(),m(l,{label:e.field.label,required:!!e.field.is_required,error:c(a).value.$error&&c(a).value.$errors[0].$message},{default:P(()=>[(n(),m(O(c(o)),{modelValue:e.field.value,"onUpdate:modelValue":s[0]||(s[0]=p=>e.field.value=p),options:e.field.options,invalid:c(a).value.$error,placeholder:e.field.placeholder},null,8,["modelValue","options","invalid","placeholder"]))]),_:1},8,["label","required","error"])}}},N={key:0},J={props:{store:{type:Object,required:!0},storeProp:{type:String,required:!0},isEdit:{type:Boolean,default:!1},type:{type:String,default:null},gridLayout:{type:String,default:"two-column"},isLoading:{type:Boolean,default:null},customFieldScope:{type:String,required:!0}},setup(e){const t=e,r=Y();a();function d(){t.isEdit&&t.store[t.storeProp].fields.forEach(o=>{const u=t.store[t.storeProp].customFields.findIndex(s=>s.id===o.custom_field_id);if(u>-1){let s=o.default_answer;s&&o.custom_field.type==="DateTime"&&(s=C(o.default_answer,"YYYY-MM-DD HH:mm:ss").format("YYYY-MM-DD HH:mm")),t.store[t.storeProp].customFields[u]=v(_({},o),{id:o.custom_field_id,value:s,label:o.custom_field.label,options:o.custom_field.options,is_required:o.custom_field.is_required,placeholder:o.custom_field.placeholder,order:o.custom_field.order})}})}async function a(){let u=(await r.fetchCustomFields({type:t.type,limit:"all"})).data.data;u.map(s=>s.value=s.default_answer),t.store[t.storeProp].customFields=S.sortBy(u,s=>s.order),d()}return x(()=>t.store[t.storeProp].fields,o=>{d()}),(o,u)=>{const s=E("BaseInputGrid");return e.store[e.storeProp]&&e.store[e.storeProp].customFields.length>0&&!e.isLoading?(n(),D("div",N,[A(s,{layout:e.gridLayout},{default:P(()=>[(n(!0),D(R,null,k(e.store[e.storeProp].customFields,(l,p)=>(n(),m(M,{key:l.id,"custom-field-scope":e.customFieldScope,store:e.store,"store-prop":e.storeProp,index:p,field:l},null,8,["custom-field-scope","store","store-prop","index","field"]))),128))]),_:1},8,["layout"])])):B("",!0)}}};export{J as _};
 | 
			
		||||
var I=Object.defineProperty,g=Object.defineProperties;var q=Object.getOwnPropertyDescriptors;var y=Object.getOwnPropertySymbols;var b=Object.prototype.hasOwnProperty,h=Object.prototype.propertyIsEnumerable;var _=(e,t,r)=>t in e?I(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,f=(e,t)=>{for(var r in t||(t={}))b.call(t,r)&&_(e,r,t[r]);if(y)for(var r of y(t))h.call(t,r)&&_(e,r,t[r]);return e},v=(e,t)=>g(e,q(t));import{J as j,L as w,O as V,T as L,k as T,aE as F,r as E,o as n,l as m,w as P,aj as O,u as c,_ as S,C as x,e as D,f as A,F as R,y as k,j as B,I as C}from"./vendor.01d0adc5.js";import{o as i,m as Y}from"./main.75722495.js";function $(e){switch(e){case"./types/DateTimeType.vue":return i(()=>import("./DateTimeType.164ef007.js"),["assets/DateTimeType.164ef007.js","assets/vendor.01d0adc5.js"]);case"./types/DateType.vue":return i(()=>import("./DateType.757171f6.js"),["assets/DateType.757171f6.js","assets/vendor.01d0adc5.js"]);case"./types/DropdownType.vue":return i(()=>import("./DropdownType.631322dc.js"),["assets/DropdownType.631322dc.js","assets/vendor.01d0adc5.js"]);case"./types/InputType.vue":return i(()=>import("./InputType.4e1e4da6.js"),["assets/InputType.4e1e4da6.js","assets/vendor.01d0adc5.js"]);case"./types/NumberType.vue":return i(()=>import("./NumberType.137b13f5.js"),["assets/NumberType.137b13f5.js","assets/vendor.01d0adc5.js"]);case"./types/PhoneType.vue":return i(()=>import("./PhoneType.57e436b9.js"),["assets/PhoneType.57e436b9.js","assets/vendor.01d0adc5.js"]);case"./types/SwitchType.vue":return i(()=>import("./SwitchType.59d9fde0.js"),["assets/SwitchType.59d9fde0.js","assets/vendor.01d0adc5.js"]);case"./types/TextAreaType.vue":return i(()=>import("./TextAreaType.ebc60805.js"),["assets/TextAreaType.ebc60805.js","assets/vendor.01d0adc5.js"]);case"./types/TimeType.vue":return i(()=>import("./TimeType.a6077fcb.js"),["assets/TimeType.a6077fcb.js","assets/vendor.01d0adc5.js"]);case"./types/UrlType.vue":return i(()=>import("./UrlType.4a23df64.js"),["assets/UrlType.4a23df64.js","assets/vendor.01d0adc5.js"]);default:return new Promise(function(t,r){(typeof queueMicrotask=="function"?queueMicrotask:setTimeout)(r.bind(null,new Error("Unknown variable dynamic import: "+e)))})}}const M={props:{field:{type:Object,required:!0},customFieldScope:{type:String,required:!0},index:{type:Number,required:!0},store:{type:Object,required:!0},storeProp:{type:String,required:!0}},setup(e){const t=e,{t:r}=j(),d={value:{required:w.withMessage(r("validation.required"),V(t.field.is_required))}},a=L(d,T(()=>t.field),{$scope:t.customFieldScope}),o=T(()=>t.field.type?F(()=>$(`./types/${t.field.type}Type.vue`)):!1);return(u,s)=>{const l=E("BaseInputGroup");return n(),m(l,{label:e.field.label,required:!!e.field.is_required,error:c(a).value.$error&&c(a).value.$errors[0].$message},{default:P(()=>[(n(),m(O(c(o)),{modelValue:e.field.value,"onUpdate:modelValue":s[0]||(s[0]=p=>e.field.value=p),options:e.field.options,invalid:c(a).value.$error,placeholder:e.field.placeholder},null,8,["modelValue","options","invalid","placeholder"]))]),_:1},8,["label","required","error"])}}},N={key:0},J={props:{store:{type:Object,required:!0},storeProp:{type:String,required:!0},isEdit:{type:Boolean,default:!1},type:{type:String,default:null},gridLayout:{type:String,default:"two-column"},isLoading:{type:Boolean,default:null},customFieldScope:{type:String,required:!0}},setup(e){const t=e,r=Y();a();function d(){t.isEdit&&t.store[t.storeProp].fields.forEach(o=>{const u=t.store[t.storeProp].customFields.findIndex(s=>s.id===o.custom_field_id);if(u>-1){let s=o.default_answer;s&&o.custom_field.type==="DateTime"&&(s=C(o.default_answer,"YYYY-MM-DD HH:mm:ss").format("YYYY-MM-DD HH:mm")),t.store[t.storeProp].customFields[u]=v(f({},o),{id:o.custom_field_id,value:s,label:o.custom_field.label,options:o.custom_field.options,is_required:o.custom_field.is_required,placeholder:o.custom_field.placeholder,order:o.custom_field.order})}})}async function a(){let u=(await r.fetchCustomFields({type:t.type,limit:"all"})).data.data;u.map(s=>s.value=s.default_answer),t.store[t.storeProp].customFields=S.sortBy(u,s=>s.order),d()}return x(()=>t.store[t.storeProp].fields,o=>{d()}),(o,u)=>{const s=E("BaseInputGrid");return e.store[e.storeProp]&&e.store[e.storeProp].customFields.length>0&&!e.isLoading?(n(),D("div",N,[A(s,{layout:e.gridLayout},{default:P(()=>[(n(!0),D(R,null,k(e.store[e.storeProp].customFields,(l,p)=>(n(),m(M,{key:l.id,"custom-field-scope":e.customFieldScope,store:e.store,"store-prop":e.storeProp,index:p,field:l},null,8,["custom-field-scope","store","store-prop","index","field"]))),128))]),_:1},8,["layout"])])):B("",!0)}}};export{J as _};
 | 
			
		||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -1 +1 @@
 | 
			
		||||
import{l as S,u as b,j as C,e as x,g}from"./main.465728e1.js";import{J as E,G as j,aN as T,ah as N,r as l,o as a,l as s,w as t,u as e,f as n,i as p,t as f,j as y}from"./vendor.d12b5734.js";const V={props:{row:{type:Object,default:null},table:{type:Object,default:null},loadData:{type:Function,default:()=>{}}},setup(i){const w=i,_=S();b();const v=C(),m=x(),{t:u}=E(),h=j();T(),N("utils");function B(r){v.openDialog({title:u("general.are_you_sure"),message:u("customers.confirm_delete",1),yesLabel:u("general.ok"),noLabel:u("general.cancel"),variant:"danger",hideNoButton:!1,size:"lg"}).then(c=>{c&&_.deleteCustomer({ids:[r]}).then(o=>{if(o.data.success)return w.loadData&&w.loadData(),!0})})}return(r,c)=>{const o=l("BaseIcon"),I=l("BaseButton"),d=l("BaseDropdownItem"),D=l("router-link"),k=l("BaseDropdown");return a(),s(k,{"content-loading":e(_).isFetchingViewData},{activator:t(()=>[e(h).name==="customers.view"?(a(),s(I,{key:0,variant:"primary"},{default:t(()=>[n(o,{name:"DotsHorizontalIcon",class:"h-5 text-white"})]),_:1})):(a(),s(o,{key:1,name:"DotsHorizontalIcon",class:"h-5 text-gray-500"}))]),default:t(()=>[e(m).hasAbilities(e(g).EDIT_CUSTOMER)?(a(),s(D,{key:0,to:`/admin/customers/${i.row.id}/edit`},{default:t(()=>[n(d,null,{default:t(()=>[n(o,{name:"PencilIcon",class:"w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"}),p(" "+f(r.$t("general.edit")),1)]),_:1})]),_:1},8,["to"])):y("",!0),e(h).name!=="customers.view"&&e(m).hasAbilities(e(g).VIEW_CUSTOMER)?(a(),s(D,{key:1,to:`customers/${i.row.id}/view`},{default:t(()=>[n(d,null,{default:t(()=>[n(o,{name:"EyeIcon",class:"w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"}),p(" "+f(r.$t("general.view")),1)]),_:1})]),_:1},8,["to"])):y("",!0),e(m).hasAbilities(e(g).DELETE_CUSTOMER)?(a(),s(d,{key:2,onClick:c[0]||(c[0]=$=>B(i.row.id))},{default:t(()=>[n(o,{name:"TrashIcon",class:"w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"}),p(" "+f(r.$t("general.delete")),1)]),_:1})):y("",!0)]),_:1},8,["content-loading"])}}};export{V as _};
 | 
			
		||||
import{l as S,u as C,j as b,e as x,g}from"./main.75722495.js";import{J as E,G as j,aN as T,ah as N,r as l,o as a,l as s,w as t,u as e,f as n,i as p,t as f,j as y}from"./vendor.01d0adc5.js";const V={props:{row:{type:Object,default:null},table:{type:Object,default:null},loadData:{type:Function,default:()=>{}}},setup(i){const w=i,_=S();C();const v=b(),m=x(),{t:u}=E(),h=j();T(),N("utils");function B(r){v.openDialog({title:u("general.are_you_sure"),message:u("customers.confirm_delete",1),yesLabel:u("general.ok"),noLabel:u("general.cancel"),variant:"danger",hideNoButton:!1,size:"lg"}).then(c=>{c&&_.deleteCustomer({ids:[r]}).then(o=>{if(o.data.success)return w.loadData&&w.loadData(),!0})})}return(r,c)=>{const o=l("BaseIcon"),I=l("BaseButton"),d=l("BaseDropdownItem"),D=l("router-link"),k=l("BaseDropdown");return a(),s(k,{"content-loading":e(_).isFetchingViewData},{activator:t(()=>[e(h).name==="customers.view"?(a(),s(I,{key:0,variant:"primary"},{default:t(()=>[n(o,{name:"DotsHorizontalIcon",class:"h-5 text-white"})]),_:1})):(a(),s(o,{key:1,name:"DotsHorizontalIcon",class:"h-5 text-gray-500"}))]),default:t(()=>[e(m).hasAbilities(e(g).EDIT_CUSTOMER)?(a(),s(D,{key:0,to:`/admin/customers/${i.row.id}/edit`},{default:t(()=>[n(d,null,{default:t(()=>[n(o,{name:"PencilIcon",class:"w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"}),p(" "+f(r.$t("general.edit")),1)]),_:1})]),_:1},8,["to"])):y("",!0),e(h).name!=="customers.view"&&e(m).hasAbilities(e(g).VIEW_CUSTOMER)?(a(),s(D,{key:1,to:`customers/${i.row.id}/view`},{default:t(()=>[n(d,null,{default:t(()=>[n(o,{name:"EyeIcon",class:"w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"}),p(" "+f(r.$t("general.view")),1)]),_:1})]),_:1},8,["to"])):y("",!0),e(m).hasAbilities(e(g).DELETE_CUSTOMER)?(a(),s(d,{key:2,onClick:c[0]||(c[0]=$=>B(i.row.id))},{default:t(()=>[n(o,{name:"TrashIcon",class:"w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"}),p(" "+f(r.$t("general.delete")),1)]),_:1})):y("",!0)]),_:1},8,["content-loading"])}}};export{V as _};
 | 
			
		||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/build/assets/CustomerSettings.3e617f27.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								public/build/assets/CustomerSettings.3e617f27.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								public/build/assets/Dashboard.bdf9de48.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								public/build/assets/Dashboard.bdf9de48.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -1 +1 @@
 | 
			
		||||
import{I as r,k as d,r as m,o as p,l as c,u as i,x as f}from"./vendor.d12b5734.js";const k={props:{modelValue:{type:String,default:r().format("YYYY-MM-DD hh:MM")}},emits:["update:modelValue"],setup(t,{emit:l}){const s=t,e=d({get:()=>s.modelValue,set:o=>{l("update:modelValue",o)}});return(o,a)=>{const u=m("BaseDatePicker");return p(),c(u,{modelValue:i(e),"onUpdate:modelValue":a[0]||(a[0]=n=>f(e)?e.value=n:null),"enable-time":""},null,8,["modelValue"])}}};export{k as default};
 | 
			
		||||
import{I as r,k as d,r as m,o as p,l as c,u as i,x as f}from"./vendor.01d0adc5.js";const k={props:{modelValue:{type:String,default:r().format("YYYY-MM-DD hh:MM")}},emits:["update:modelValue"],setup(t,{emit:l}){const s=t,e=d({get:()=>s.modelValue,set:o=>{l("update:modelValue",o)}});return(o,a)=>{const u=m("BaseDatePicker");return p(),c(u,{modelValue:i(e),"onUpdate:modelValue":a[0]||(a[0]=n=>f(e)?e.value=n:null),"enable-time":""},null,8,["modelValue"])}}};export{k as default};
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
import{I as r,k as d,r as m,o as p,l as c,u as f,x as i}from"./vendor.d12b5734.js";const k={props:{modelValue:{type:[String,Date],default:r().format("YYYY-MM-DD")}},emits:["update:modelValue"],setup(t,{emit:l}){const s=t,e=d({get:()=>s.modelValue,set:o=>{l("update:modelValue",o)}});return(o,a)=>{const u=m("BaseDatePicker");return p(),c(u,{modelValue:f(e),"onUpdate:modelValue":a[0]||(a[0]=n=>i(e)?e.value=n:null)},null,8,["modelValue"])}}};export{k as default};
 | 
			
		||||
import{I as r,k as d,r as m,o as p,l as c,u as f,x as i}from"./vendor.01d0adc5.js";const k={props:{modelValue:{type:[String,Date],default:r().format("YYYY-MM-DD")}},emits:["update:modelValue"],setup(t,{emit:l}){const s=t,e=d({get:()=>s.modelValue,set:o=>{l("update:modelValue",o)}});return(o,a)=>{const u=m("BaseDatePicker");return p(),c(u,{modelValue:f(e),"onUpdate:modelValue":a[0]||(a[0]=n=>i(e)?e.value=n:null)},null,8,["modelValue"])}}};export{k as default};
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
import{aU as $r,aV as Br,aQ as Kr,aW as Hr,o as Wr,e as Xr,h as Yr}from"./vendor.d12b5734.js";import{_ as Vr}from"./main.465728e1.js";var gr={exports:{}};/**!
 | 
			
		||||
import{aU as $r,aV as Br,aQ as Kr,aW as Hr,o as Wr,e as Xr,h as Yr}from"./vendor.01d0adc5.js";import{_ as Vr}from"./main.75722495.js";var gr={exports:{}};/**!
 | 
			
		||||
 * Sortable 1.14.0
 | 
			
		||||
 * @author	RubaXa   <trash@rubaxa.org>
 | 
			
		||||
 * @author	owenm    <owen23355@gmail.com>
 | 
			
		||||
@ -1 +0,0 @@
 | 
			
		||||
import{k as p,r,o as d,l as m,u as c,x as i}from"./vendor.d12b5734.js";const f={props:{modelValue:{type:[String,Object,Number],default:null},options:{type:Array,default:()=>[]},valueProp:{type:String,default:"name"},label:{type:String,default:"name"},object:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{emit:a}){const u=e,l=p({get:()=>u.modelValue,set:t=>{a("update:modelValue",t)}});return(t,o)=>{const n=r("BaseMultiselect");return d(),m(n,{modelValue:c(l),"onUpdate:modelValue":o[0]||(o[0]=s=>i(l)?l.value=s:null),options:e.options,label:e.label,"value-prop":e.valueProp,object:e.object},null,8,["modelValue","options","label","value-prop","object"])}}};export{f as default};
 | 
			
		||||
							
								
								
									
										1
									
								
								public/build/assets/DropdownType.631322dc.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								public/build/assets/DropdownType.631322dc.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
import{k as p,r as d,o as r,l as c,u as m,x as i}from"./vendor.01d0adc5.js";const b={props:{modelValue:{type:[String,Object,Number],default:null},options:{type:Array,default:()=>[]},valueProp:{type:String,default:"name"},label:{type:String,default:"name"},object:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{emit:o}){const u=e,l=p({get:()=>u.modelValue,set:t=>{o("update:modelValue",t)}});return(t,a)=>{const n=d("BaseMultiselect");return r(),c(n,{modelValue:m(l),"onUpdate:modelValue":a[0]||(a[0]=s=>i(l)?l.value=s:null),options:e.options,label:e.label,"value-prop":e.valueProp,object:e.object},null,8,["modelValue","options","label","value-prop","object"])}}};export{b as default};
 | 
			
		||||
							
								
								
									
										1
									
								
								public/build/assets/EstimateCreate.4010e1b1.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								public/build/assets/EstimateCreate.4010e1b1.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user