mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-12 06:02:39 +01:00
commit
b4374f0b99
@ -1 +1 @@
|
|||||||
5.3.38
|
5.3.39
|
@ -949,3 +949,19 @@ ORDER BY clients.id;
|
|||||||
return $type.'s';
|
return $type.'s';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* query if we want to company company ledger to client balance
|
||||||
|
$results = \DB::select( \DB::raw("
|
||||||
|
SELECT
|
||||||
|
clients.id as client_id,
|
||||||
|
clients.balance as client_balance
|
||||||
|
from clients,
|
||||||
|
(select max(company_ledgers.id) as cid, company_ledgers.client_id as client_id, company_ledgers.balance as balance
|
||||||
|
FROM company_ledgers) ledger
|
||||||
|
where clients.id=ledger.client_id
|
||||||
|
AND clients.balance != ledger.balance
|
||||||
|
GROUP BY clients.id
|
||||||
|
ORDER BY clients.id;
|
||||||
|
") );
|
||||||
|
*/
|
@ -100,6 +100,9 @@ class ContactLoginController extends Controller
|
|||||||
|
|
||||||
$contact = ClientContact::where(['email' => $request->input('email'), 'company_id' => $company->id])->first();
|
$contact = ClientContact::where(['email' => $request->input('email'), 'company_id' => $company->id])->first();
|
||||||
|
|
||||||
|
if(!$contact)
|
||||||
|
return $this->sendFailedLoginResponse($request);
|
||||||
|
|
||||||
if(Hash::check($request->input('password'), $contact->password))
|
if(Hash::check($request->input('password'), $contact->password))
|
||||||
return $this->authenticated($request, $contact);
|
return $this->authenticated($request, $contact);
|
||||||
|
|
||||||
|
@ -305,13 +305,69 @@ class PreviewController extends BaseController
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private function blankEntity()
|
private function blankEntity()
|
||||||
{
|
{
|
||||||
App::forgetInstance('translator');
|
App::forgetInstance('translator');
|
||||||
$t = app('translator');
|
$t = app('translator');
|
||||||
$t->replace(Ninja::transformTranslations(auth()->user()->company()->settings));
|
$t->replace(Ninja::transformTranslations(auth()->user()->company()->settings));
|
||||||
|
|
||||||
|
$invitation = InvoiceInvitation::where('company_id', auth()->user()->company()->id)->first();
|
||||||
|
|
||||||
|
/* If we don't have a valid invitation in the system - create a mock using transactions */
|
||||||
|
if(!$invitation)
|
||||||
|
return $this->mockEntity();
|
||||||
|
|
||||||
|
$design_object = json_decode(json_encode(request()->input('design')));
|
||||||
|
|
||||||
|
if (! is_object($design_object)) {
|
||||||
|
return response()->json(['message' => 'Invalid custom design object'], 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
$html = new HtmlEngine($invitation);
|
||||||
|
|
||||||
|
$design = new Design(Design::CUSTOM, ['custom_partials' => request()->design['design']]);
|
||||||
|
|
||||||
|
$state = [
|
||||||
|
'template' => $design->elements([
|
||||||
|
'client' => $invitation->invoice->client,
|
||||||
|
'entity' => $invitation->invoice,
|
||||||
|
'pdf_variables' => (array) $invitation->invoice->company->settings->pdf_variables,
|
||||||
|
'products' => request()->design['design']['product'],
|
||||||
|
]),
|
||||||
|
'variables' => $html->generateLabelsAndValues(),
|
||||||
|
'process_markdown' => $invitation->invoice->client->company->markdown_enabled,
|
||||||
|
];
|
||||||
|
|
||||||
|
$maker = new PdfMaker($state);
|
||||||
|
|
||||||
|
$maker
|
||||||
|
->design($design)
|
||||||
|
->build();
|
||||||
|
|
||||||
|
if (request()->query('html') == 'true') {
|
||||||
|
return $maker->getCompiledHTML();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config('ninja.phantomjs_pdf_generation') || config('ninja.pdf_generator') == 'phantom') {
|
||||||
|
return (new Phantom)->convertHtmlToPdf($maker->getCompiledHTML(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(config('ninja.invoiceninja_hosted_pdf_generation') || config('ninja.pdf_generator') == 'hosted_ninja'){
|
||||||
|
return (new NinjaPdf())->build($maker->getCompiledHTML(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
$file_path = PreviewPdf::dispatchNow($maker->getCompiledHTML(true), auth()->user()->company());
|
||||||
|
|
||||||
|
$response = Response::make($file_path, 200);
|
||||||
|
$response->header('Content-Type', 'application/pdf');
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private function mockEntity()
|
||||||
|
{
|
||||||
|
|
||||||
DB::connection(auth()->user()->company()->db)->beginTransaction();
|
DB::connection(auth()->user()->company()->db)->beginTransaction();
|
||||||
|
|
||||||
$client = Client::factory()->create([
|
$client = Client::factory()->create([
|
||||||
@ -345,8 +401,6 @@ class PreviewController extends BaseController
|
|||||||
$invoice->setRelation('company', auth()->user()->company());
|
$invoice->setRelation('company', auth()->user()->company());
|
||||||
$invoice->load('client.company');
|
$invoice->load('client.company');
|
||||||
|
|
||||||
// nlog(print_r($invoice->toArray(),1));
|
|
||||||
|
|
||||||
$design_object = json_decode(json_encode(request()->input('design')));
|
$design_object = json_decode(json_encode(request()->input('design')));
|
||||||
|
|
||||||
if (! is_object($design_object)) {
|
if (! is_object($design_object)) {
|
||||||
@ -374,6 +428,8 @@ class PreviewController extends BaseController
|
|||||||
->design($design)
|
->design($design)
|
||||||
->build();
|
->build();
|
||||||
|
|
||||||
|
DB::connection(auth()->user()->company()->db)->rollBack();
|
||||||
|
|
||||||
if (request()->query('html') == 'true') {
|
if (request()->query('html') == 'true') {
|
||||||
return $maker->getCompiledHTML();
|
return $maker->getCompiledHTML();
|
||||||
}
|
}
|
||||||
@ -388,8 +444,6 @@ class PreviewController extends BaseController
|
|||||||
|
|
||||||
$file_path = PreviewPdf::dispatchNow($maker->getCompiledHTML(true), auth()->user()->company());
|
$file_path = PreviewPdf::dispatchNow($maker->getCompiledHTML(true), auth()->user()->company());
|
||||||
|
|
||||||
DB::connection(auth()->user()->company()->db)->rollBack();
|
|
||||||
|
|
||||||
$response = Response::make($file_path, 200);
|
$response = Response::make($file_path, 200);
|
||||||
$response->header('Content-Type', 'application/pdf');
|
$response->header('Content-Type', 'application/pdf');
|
||||||
|
|
||||||
|
@ -48,6 +48,7 @@ class StoreInvoiceRequest extends Request
|
|||||||
}
|
}
|
||||||
|
|
||||||
$rules['client_id'] = 'bail|required|exists:clients,id,company_id,'.auth()->user()->company()->id;
|
$rules['client_id'] = 'bail|required|exists:clients,id,company_id,'.auth()->user()->company()->id;
|
||||||
|
// $rules['client_id'] = ['required', Rule::exists('clients')->where('company_id', auth()->user()->company()->id)];
|
||||||
|
|
||||||
$rules['invitations.*.client_contact_id'] = 'distinct';
|
$rules['invitations.*.client_contact_id'] = 'distinct';
|
||||||
|
|
||||||
|
@ -307,17 +307,13 @@ class CompanyImport implements ShouldQueue
|
|||||||
nlog("Backup user count = ".count($backup_users));
|
nlog("Backup user count = ".count($backup_users));
|
||||||
|
|
||||||
if(count($backup_users) > 1){
|
if(count($backup_users) > 1){
|
||||||
// $this->message = 'Only one user can be in the import for a Free Account';
|
|
||||||
// $this->pre_flight_checks_pass = false;
|
|
||||||
//$this->force_user_coalesce = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nlog("backup users email = " . $backup_users[0]->email);
|
nlog("backup users email = " . $backup_users[0]->email);
|
||||||
|
|
||||||
if(count($backup_users) == 1 && $this->company_owner->email != $backup_users[0]->email) {
|
if(count($backup_users) == 1 && $this->company_owner->email != $backup_users[0]->email) {
|
||||||
// $this->message = 'Account emails do not match. Account owner email must match backup user email';
|
|
||||||
// $this->pre_flight_checks_pass = false;
|
|
||||||
// $this->force_user_coalesce = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$backup_users_emails = array_column($backup_users, 'email');
|
$backup_users_emails = array_column($backup_users, 'email');
|
||||||
@ -331,22 +327,11 @@ class CompanyImport implements ShouldQueue
|
|||||||
if($existing_user_count > 1){
|
if($existing_user_count > 1){
|
||||||
|
|
||||||
if($this->account->plan == 'pro'){
|
if($this->account->plan == 'pro'){
|
||||||
// $this->message = 'Pro plan is limited to one user, you have multiple users in the backup file';
|
|
||||||
// $this->pre_flight_checks_pass = false;
|
|
||||||
// $this->force_user_coalesce = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if($this->account->plan == 'enterprise'){
|
if($this->account->plan == 'enterprise'){
|
||||||
|
|
||||||
// $total_import_users = count($backup_users_emails);
|
|
||||||
|
|
||||||
// $account_plan_num_user = $this->account->num_users;
|
|
||||||
|
|
||||||
// if($total_import_users > $account_plan_num_user){
|
|
||||||
// $this->message = "Total user count ({$total_import_users}) greater than your plan allows ({$account_plan_num_user})";
|
|
||||||
// $this->pre_flight_checks_pass = false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ namespace App\Mail;
|
|||||||
use Illuminate\Bus\Queueable;
|
use Illuminate\Bus\Queueable;
|
||||||
use Illuminate\Mail\Mailable;
|
use Illuminate\Mail\Mailable;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use Illuminate\Support\Facades\App;
|
||||||
|
|
||||||
class ExistingMigration extends Mailable
|
class ExistingMigration extends Mailable
|
||||||
{
|
{
|
||||||
@ -35,6 +36,8 @@ class ExistingMigration extends Mailable
|
|||||||
*/
|
*/
|
||||||
public function build()
|
public function build()
|
||||||
{
|
{
|
||||||
|
App::setLocale($this->company->getLocale());
|
||||||
|
|
||||||
$this->settings = $this->company->settings;
|
$this->settings = $this->company->settings;
|
||||||
$this->logo = $this->company->present()->logo();
|
$this->logo = $this->company->present()->logo();
|
||||||
$this->company_name = $this->company->present()->name();
|
$this->company_name = $this->company->present()->name();
|
||||||
|
@ -39,6 +39,7 @@ class MigrationCompleted extends Mailable
|
|||||||
App::forgetInstance('translator');
|
App::forgetInstance('translator');
|
||||||
$t = app('translator');
|
$t = app('translator');
|
||||||
$t->replace(Ninja::transformTranslations($this->company->settings));
|
$t->replace(Ninja::transformTranslations($this->company->settings));
|
||||||
|
App::setLocale($this->company->getLocale());
|
||||||
|
|
||||||
$data['settings'] = $this->company->settings;
|
$data['settings'] = $this->company->settings;
|
||||||
$data['company'] = $this->company->fresh();
|
$data['company'] = $this->company->fresh();
|
||||||
|
@ -4,6 +4,7 @@ namespace App\Mail;
|
|||||||
|
|
||||||
use App\Models\Company;
|
use App\Models\Company;
|
||||||
use Illuminate\Mail\Mailable;
|
use Illuminate\Mail\Mailable;
|
||||||
|
use Illuminate\Support\Facades\App;
|
||||||
|
|
||||||
class MigrationFailed extends Mailable
|
class MigrationFailed extends Mailable
|
||||||
{
|
{
|
||||||
@ -35,6 +36,8 @@ class MigrationFailed extends Mailable
|
|||||||
*/
|
*/
|
||||||
public function build()
|
public function build()
|
||||||
{
|
{
|
||||||
|
App::setLocale($this->company->getLocale());
|
||||||
|
|
||||||
return $this
|
return $this
|
||||||
->from(config('mail.from.address'), config('mail.from.name'))
|
->from(config('mail.from.address'), config('mail.from.name'))
|
||||||
->view('email.migration.failed', [
|
->view('email.migration.failed', [
|
||||||
|
@ -30,6 +30,7 @@ use App\Utils\PhantomJS\Phantom;
|
|||||||
use App\Utils\Traits\Pdf\PdfMaker as PdfMakerTrait;
|
use App\Utils\Traits\Pdf\PdfMaker as PdfMakerTrait;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Database\Eloquent\Collection;
|
use Illuminate\Database\Eloquent\Collection;
|
||||||
|
use Illuminate\Support\Carbon;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\LazyCollection;
|
use Illuminate\Support\LazyCollection;
|
||||||
|
|
||||||
@ -110,7 +111,7 @@ class Statement
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($this->rollback) {
|
if ($this->rollback) {
|
||||||
DB::rollBack();
|
\DB::connection(config('database.default'))->rollBack();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -129,7 +130,8 @@ class Statement
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (\is_null($this->entity)) {
|
if (\is_null($this->entity)) {
|
||||||
DB::beginTransaction();
|
\DB::connection(config('database.default'))->beginTransaction();
|
||||||
|
|
||||||
$this->rollback = true;
|
$this->rollback = true;
|
||||||
|
|
||||||
$invoice = InvoiceFactory::create($this->client->company->id, $this->client->user->id);
|
$invoice = InvoiceFactory::create($this->client->company->id, $this->client->user->id);
|
||||||
@ -219,15 +221,16 @@ class Statement
|
|||||||
*
|
*
|
||||||
* @return Invoice[]|\Illuminate\Database\Eloquent\Collection
|
* @return Invoice[]|\Illuminate\Database\Eloquent\Collection
|
||||||
*/
|
*/
|
||||||
protected function getInvoices(): Builder
|
protected function getInvoices(): \Illuminate\Support\LazyCollection
|
||||||
{
|
{
|
||||||
return Invoice::withTrashed()
|
return Invoice::withTrashed()
|
||||||
->where('is_deleted', false)
|
->where('is_deleted', false)
|
||||||
->where('company_id', $this->client->company_id)
|
->where('company_id', $this->client->company_id)
|
||||||
->where('client_id', $this->client->id)
|
->where('client_id', $this->client->id)
|
||||||
->whereIn('status_id', [Invoice::STATUS_SENT, Invoice::STATUS_PARTIAL, Invoice::STATUS_PAID])
|
->whereIn('status_id', [Invoice::STATUS_SENT, Invoice::STATUS_PARTIAL, Invoice::STATUS_PAID])
|
||||||
->whereBetween('date', [$this->options['start_date'], $this->options['end_date']])
|
->whereBetween('date', [Carbon::parse($this->options['start_date']), Carbon::parse($this->options['end_date'])])
|
||||||
->orderBy('number', 'ASC');
|
->orderBy('number', 'ASC')
|
||||||
|
->cursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -235,7 +238,7 @@ class Statement
|
|||||||
*
|
*
|
||||||
* @return Payment[]|\Illuminate\Database\Eloquent\Collection
|
* @return Payment[]|\Illuminate\Database\Eloquent\Collection
|
||||||
*/
|
*/
|
||||||
protected function getPayments(): Builder
|
protected function getPayments(): \Illuminate\Support\LazyCollection
|
||||||
{
|
{
|
||||||
return Payment::withTrashed()
|
return Payment::withTrashed()
|
||||||
->with('client.country','invoices')
|
->with('client.country','invoices')
|
||||||
@ -243,8 +246,9 @@ class Statement
|
|||||||
->where('company_id', $this->client->company_id)
|
->where('company_id', $this->client->company_id)
|
||||||
->where('client_id', $this->client->id)
|
->where('client_id', $this->client->id)
|
||||||
->whereIn('status_id', [Payment::STATUS_COMPLETED, Payment::STATUS_PARTIALLY_REFUNDED, Payment::STATUS_REFUNDED])
|
->whereIn('status_id', [Payment::STATUS_COMPLETED, Payment::STATUS_PARTIALLY_REFUNDED, Payment::STATUS_REFUNDED])
|
||||||
->whereBetween('date', [$this->options['start_date'], $this->options['end_date']])
|
->whereBetween('date', [Carbon::parse($this->options['start_date']), Carbon::parse($this->options['end_date'])])
|
||||||
->orderBy('number', 'ASC');
|
->orderBy('number', 'ASC')
|
||||||
|
->cursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -26,6 +26,7 @@ class MarkSent extends AbstractService
|
|||||||
public function __construct(Client $client, Invoice $invoice)
|
public function __construct(Client $client, Invoice $invoice)
|
||||||
{
|
{
|
||||||
$this->client = $client;
|
$this->client = $client;
|
||||||
|
|
||||||
$this->invoice = $invoice;
|
$this->invoice = $invoice;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,25 +28,29 @@ class LedgerService
|
|||||||
{
|
{
|
||||||
$balance = 0;
|
$balance = 0;
|
||||||
|
|
||||||
\DB::connection(config('database.default'))->beginTransaction();
|
// \DB::connection(config('database.default'))->beginTransaction();
|
||||||
|
|
||||||
$company_ledger = $this->ledger();
|
\DB::connection(config('database.default'))->transaction(function () use($notes, $adjustment, $balance){
|
||||||
|
|
||||||
if ($company_ledger) {
|
$company_ledger = $this->ledger();
|
||||||
$balance = $company_ledger->balance;
|
|
||||||
}
|
|
||||||
|
|
||||||
$company_ledger = CompanyLedgerFactory::create($this->entity->company_id, $this->entity->user_id);
|
if ($company_ledger) {
|
||||||
$company_ledger->client_id = $this->entity->client_id;
|
$balance = $company_ledger->balance;
|
||||||
$company_ledger->adjustment = $adjustment;
|
}
|
||||||
$company_ledger->notes = $notes;
|
|
||||||
$company_ledger->balance = $balance + $adjustment;
|
|
||||||
$company_ledger->activity_id = Activity::UPDATE_INVOICE;
|
|
||||||
$company_ledger->save();
|
|
||||||
|
|
||||||
$this->entity->company_ledger()->save($company_ledger);
|
$company_ledger = CompanyLedgerFactory::create($this->entity->company_id, $this->entity->user_id);
|
||||||
|
$company_ledger->client_id = $this->entity->client_id;
|
||||||
|
$company_ledger->adjustment = $adjustment;
|
||||||
|
$company_ledger->notes = $notes;
|
||||||
|
$company_ledger->balance = $balance + $adjustment;
|
||||||
|
$company_ledger->activity_id = Activity::UPDATE_INVOICE;
|
||||||
|
$company_ledger->save();
|
||||||
|
|
||||||
\DB::connection(config('database.default'))->commit();
|
$this->entity->company_ledger()->save($company_ledger);
|
||||||
|
|
||||||
|
}, 5);
|
||||||
|
|
||||||
|
// \DB::connection(config('database.default'))->commit();
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@ -55,7 +59,9 @@ class LedgerService
|
|||||||
{
|
{
|
||||||
$balance = 0;
|
$balance = 0;
|
||||||
|
|
||||||
\DB::connection(config('database.default'))->beginTransaction();
|
// \DB::connection(config('database.default'))->beginTransaction();
|
||||||
|
|
||||||
|
\DB::connection(config('database.default'))->transaction(function () use($notes, $adjustment, $balance){
|
||||||
|
|
||||||
/* Get the last record for the client and set the current balance*/
|
/* Get the last record for the client and set the current balance*/
|
||||||
$company_ledger = $this->ledger();
|
$company_ledger = $this->ledger();
|
||||||
@ -74,7 +80,9 @@ class LedgerService
|
|||||||
|
|
||||||
$this->entity->company_ledger()->save($company_ledger);
|
$this->entity->company_ledger()->save($company_ledger);
|
||||||
|
|
||||||
\DB::connection(config('database.default'))->commit();
|
}, 5);
|
||||||
|
|
||||||
|
// \DB::connection(config('database.default'))->commit();
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@ -83,7 +91,9 @@ class LedgerService
|
|||||||
{
|
{
|
||||||
$balance = 0;
|
$balance = 0;
|
||||||
|
|
||||||
\DB::connection(config('database.default'))->beginTransaction();
|
// \DB::connection(config('database.default'))->beginTransaction();
|
||||||
|
|
||||||
|
\DB::connection(config('database.default'))->transaction(function () use($notes, $adjustment, $balance){
|
||||||
|
|
||||||
$company_ledger = $this->ledger();
|
$company_ledger = $this->ledger();
|
||||||
|
|
||||||
@ -101,7 +111,9 @@ class LedgerService
|
|||||||
|
|
||||||
$this->entity->company_ledger()->save($company_ledger);
|
$this->entity->company_ledger()->save($company_ledger);
|
||||||
|
|
||||||
\DB::connection(config('database.default'))->commit();
|
}, 5);
|
||||||
|
|
||||||
|
// \DB::connection(config('database.default'))->commit();
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@ -123,10 +135,3 @@ class LedgerService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
DB::connection(config('database.default'))->beginTransaction();
|
|
||||||
|
|
||||||
\DB::connection(config('database.default'))->commit();
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
@ -359,7 +359,7 @@ class Design extends BaseDesign
|
|||||||
|
|
||||||
$tbody = [];
|
$tbody = [];
|
||||||
|
|
||||||
foreach ($this->invoices->cursor() as $invoice) {
|
foreach ($this->invoices as $invoice) {
|
||||||
$element = ['element' => 'tr', 'elements' => []];
|
$element = ['element' => 'tr', 'elements' => []];
|
||||||
|
|
||||||
$element['elements'][] = ['element' => 'td', 'content' => $invoice->number];
|
$element['elements'][] = ['element' => 'td', 'content' => $invoice->number];
|
||||||
@ -407,7 +407,7 @@ class Design extends BaseDesign
|
|||||||
|
|
||||||
$tbody = [];
|
$tbody = [];
|
||||||
|
|
||||||
foreach ($this->payments->cursor() as $payment) {
|
foreach ($this->payments as $payment) {
|
||||||
foreach ($payment->invoices as $invoice) {
|
foreach ($payment->invoices as $invoice) {
|
||||||
$element = ['element' => 'tr', 'elements' => []];
|
$element = ['element' => 'tr', 'elements' => []];
|
||||||
|
|
||||||
|
@ -14,8 +14,8 @@ return [
|
|||||||
'require_https' => env('REQUIRE_HTTPS', true),
|
'require_https' => env('REQUIRE_HTTPS', true),
|
||||||
'app_url' => rtrim(env('APP_URL', ''), '/'),
|
'app_url' => rtrim(env('APP_URL', ''), '/'),
|
||||||
'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
|
'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
|
||||||
'app_version' => '5.3.38',
|
'app_version' => '5.3.39',
|
||||||
'app_tag' => '5.3.38',
|
'app_tag' => '5.3.39',
|
||||||
'minimum_client_version' => '5.0.16',
|
'minimum_client_version' => '5.0.16',
|
||||||
'terms_version' => '1.0.1',
|
'terms_version' => '1.0.1',
|
||||||
'api_secret' => env('API_SECRET', ''),
|
'api_secret' => env('API_SECRET', ''),
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@page {
|
@page {
|
||||||
margin: $global_margin;
|
margin: 5px $global_margin $global_margin $global_margin;
|
||||||
size: $page_size $page_layout;
|
size: $page_size $page_layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,7 +42,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.header-wrapper #entity-details {
|
.header-wrapper #entity-details {
|
||||||
margin-top: 1.5rem;
|
margin-top: 0.5rem;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
@ -74,7 +74,7 @@
|
|||||||
min-width: 100%;
|
min-width: 100%;
|
||||||
table-layout: fixed;
|
table-layout: fixed;
|
||||||
overflow-wrap: break-word;
|
overflow-wrap: break-word;
|
||||||
margin-top: 3rem;
|
margin-top: 1rem;
|
||||||
/* margin-bottom: 200px; */
|
/* margin-bottom: 200px; */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,7 +89,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
[data-ref="table"] > thead > tr > th {
|
[data-ref="table"] > thead > tr > th {
|
||||||
padding: 1rem;
|
padding: 0.5rem;
|
||||||
background-color: #e6e6e6;
|
background-color: #e6e6e6;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,7 +99,7 @@
|
|||||||
|
|
||||||
[data-ref="table"] > tbody > tr > td {
|
[data-ref="table"] > tbody > tr > td {
|
||||||
border-bottom: 1px solid #e6e6e6;
|
border-bottom: 1px solid #e6e6e6;
|
||||||
padding: 1rem;
|
padding: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
[data-ref="table"] > tbody > tr > td:last-child {
|
[data-ref="table"] > tbody > tr > td:last-child {
|
||||||
@ -111,7 +111,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#table-totals {
|
#table-totals {
|
||||||
margin-top: 1rem;
|
margin-top: 0rem;
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 2fr 1fr;
|
grid-template-columns: 2fr 1fr;
|
||||||
padding-top: .5rem;
|
padding-top: .5rem;
|
||||||
@ -127,14 +127,14 @@
|
|||||||
|
|
||||||
#table-totals>.totals-table-right-side>*> :nth-child(1) {
|
#table-totals>.totals-table-right-side>*> :nth-child(1) {
|
||||||
text-align: "$dir_text_align";
|
text-align: "$dir_text_align";
|
||||||
margin-top: .75rem;
|
margin-top: .25rem;
|
||||||
padding-left: 7px;
|
padding-left: 7px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#table-totals>.totals-table-right-side> * > :not([hidden]) ~ :not([hidden]) {
|
#table-totals>.totals-table-right-side> * > :not([hidden]) ~ :not([hidden]) {
|
||||||
--tw-space-y-reverse: 0;
|
--tw-space-y-reverse: 0;
|
||||||
margin-top: calc(.75rem * calc(1 - var(--tw-space-y-reverse)));
|
margin-top: calc(.25rem * calc(1 - var(--tw-space-y-reverse)));
|
||||||
margin-bottom: calc(.75rem * var(--tw-space-y-reverse));
|
margin-bottom: calc(.25rem * var(--tw-space-y-reverse));
|
||||||
}
|
}
|
||||||
|
|
||||||
#table-totals>.totals-table-right-side>*> :nth-child(2) {
|
#table-totals>.totals-table-right-side>*> :nth-child(2) {
|
||||||
@ -197,7 +197,7 @@
|
|||||||
.repeating-header-space, **/
|
.repeating-header-space, **/
|
||||||
.repeating-footer,
|
.repeating-footer,
|
||||||
.repeating-footer-space {
|
.repeating-footer-space {
|
||||||
height: 160px;
|
height: 100px;
|
||||||
}
|
}
|
||||||
.repeating-header {
|
.repeating-header {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
|
Loading…
Reference in New Issue
Block a user