1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-10 21:22:58 +01:00
invoiceninja/resources/views/clients/show.blade.php

426 lines
15 KiB
PHP
Raw Normal View History

2015-03-16 22:45:25 +01:00
@extends('header')
@section('head')
@parent
@if ($client->hasAddress())
<style>
#map {
width: 100%;
height: 200px;
border-width: 1px;
border-style: solid;
border-color: #ddd;
}
</style>
2016-03-22 13:38:22 +01:00
<script src="https://maps.googleapis.com/maps/api/js?key={{ env('GOOGLE_MAPS_API_KEY') }}"></script>
@endif
@stop
2015-03-16 22:45:25 +01:00
@section('content')
2016-02-04 19:36:39 +01:00
<div class="row">
<div class="col-md-7">
2016-02-04 19:36:39 +01:00
<div>
<span style="font-size:28px">{{ $client->getDisplayName() }}</span>
@if ($client->trashed())
&nbsp;&nbsp;{!! $client->present()->status !!}
@endif
</div>
</div>
<div class="col-md-5">
2016-02-04 19:36:39 +01:00
<div class="pull-right">
{!! Former::open('clients/bulk')->addClass('mainForm') !!}
<div style="display:none">
{!! Former::text('action') !!}
{!! Former::text('public_id')->value($client->public_id) !!}
</div>
2015-03-16 22:45:25 +01:00
2016-02-04 19:36:39 +01:00
@if ($gatewayLink)
2016-06-20 16:14:43 +02:00
{!! Button::normal(trans('texts.view_in_gateway', ['gateway'=>$gatewayName]))
->asLinkTo($gatewayLink)
->withAttributes(['target' => '_blank']) !!}
2016-02-04 19:36:39 +01:00
@endif
2015-03-16 22:45:25 +01:00
2016-02-04 19:36:39 +01:00
@if ($client->trashed())
2016-04-26 03:53:39 +02:00
@can('edit', $client)
2016-03-16 00:08:00 +01:00
{!! Button::primary(trans('texts.restore_client'))->withAttributes(['onclick' => 'onRestoreClick()']) !!}
2016-04-26 03:53:39 +02:00
@endcan
2016-02-04 19:36:39 +01:00
@else
2016-04-26 03:53:39 +02:00
@can('edit', $client)
2016-02-04 19:36:39 +01:00
{!! DropdownButton::normal(trans('texts.edit_client'))
->withAttributes(['class'=>'normalDropDown'])
->withContents([
['label' => trans('texts.archive_client'), 'url' => "javascript:onArchiveClick()"],
['label' => trans('texts.delete_client'), 'url' => "javascript:onDeleteClick()"],
]
)->split() !!}
2016-04-26 03:53:39 +02:00
@endcan
@can('create', ENTITY_INVOICE)
2016-03-16 00:08:00 +01:00
{!! DropdownButton::primary(trans('texts.new_invoice'))
->withAttributes(['class'=>'primaryDropDown'])
->withContents($actionLinks)->split() !!}
2016-04-26 03:53:39 +02:00
@endcan
2016-02-04 19:36:39 +01:00
@endif
{!! Former::close() !!}
2015-03-16 22:45:25 +01:00
2016-02-04 19:36:39 +01:00
</div>
</div>
</div>
2015-03-16 22:45:25 +01:00
@if ($client->last_login > 0)
<h3 style="margin-top:0px"><small>
2015-03-26 07:24:02 +01:00
{{ trans('texts.last_logged_in') }} {{ Utils::timestampToDateTimeString(strtotime($client->last_login)) }}
2015-03-16 22:45:25 +01:00
</small></h3>
@endif
2016-02-04 19:36:39 +01:00
<br/>
2015-03-16 22:45:25 +01:00
2015-04-21 22:09:45 +02:00
<div class="panel panel-default">
<div class="panel-body">
2015-03-16 22:45:25 +01:00
<div class="row">
<div class="col-md-3">
<h3>{{ trans('texts.details') }}</h3>
2015-03-31 20:50:58 +02:00
@if ($client->id_number)
2015-04-01 17:44:55 +02:00
<p><i class="fa fa-id-number" style="width: 20px"></i>{{ trans('texts.id_number').': '.$client->id_number }}</p>
2015-03-31 20:50:58 +02:00
@endif
2015-04-01 17:44:55 +02:00
@if ($client->vat_number)
<p><i class="fa fa-vat-number" style="width: 20px"></i>{{ trans('texts.vat_number').': '.$client->vat_number }}</p>
@endif
@if ($client->address1)
{{ $client->address1 }}<br/>
@endif
@if ($client->address2)
{{ $client->address2 }}<br/>
@endif
2015-10-13 17:44:01 +02:00
@if ($client->getCityState())
{{ $client->getCityState() }}<br/>
2015-04-01 17:44:55 +02:00
@endif
@if ($client->country)
2015-10-14 22:56:17 +02:00
{{ $client->country->name }}<br/>
2015-04-01 17:44:55 +02:00
@endif
@if ($client->account->custom_client_label1 && $client->custom_value1)
{{ $client->account->custom_client_label1 . ': ' . $client->custom_value1 }}<br/>
@endif
@if ($client->account->custom_client_label2 && $client->custom_value2)
{{ $client->account->custom_client_label2 . ': ' . $client->custom_value2 }}<br/>
@endif
@if ($client->work_phone)
<i class="fa fa-phone" style="width: 20px"></i>{{ $client->work_phone }}
2015-04-01 17:44:55 +02:00
@endif
@if ($client->private_notes)
<p><i>{{ $client->private_notes }}</i></p>
@endif
2016-06-20 16:14:43 +02:00
2015-04-01 17:44:55 +02:00
@if ($client->client_industry)
{{ $client->client_industry->name }}<br/>
@endif
@if ($client->client_size)
{{ $client->client_size->name }}<br/>
2016-06-20 16:14:43 +02:00
@endif
2015-04-01 17:44:55 +02:00
@if ($client->website)
2015-10-13 17:44:01 +02:00
<p>{!! Utils::formatWebsite($client->website) !!}</p>
2015-04-01 17:44:55 +02:00
@endif
@if ($client->language)
<p><i class="fa fa-language" style="width: 20px"></i>{{ $client->language->name }}</p>
@endif
2015-03-16 22:45:25 +01:00
<p>{{ $client->payment_terms ? trans('texts.payment_terms') . ": Net " . $client->payment_terms : '' }}</p>
</div>
<div class="col-md-3">
<h3>{{ trans('texts.contacts') }}</h3>
@foreach ($client->contacts as $contact)
2015-04-01 17:44:55 +02:00
@if ($contact->first_name || $contact->last_name)
<b>{{ $contact->first_name.' '.$contact->last_name }}</b><br/>
@endif
@if ($contact->email)
<i class="fa fa-envelope" style="width: 20px"></i>{!! HTML::mailto($contact->email, $contact->email) !!}<br/>
@endif
@if ($contact->phone)
<i class="fa fa-phone" style="width: 20px"></i>{{ $contact->phone }}<br/>
2016-05-24 23:02:28 +02:00
@endif
2016-09-06 11:12:36 +02:00
@if (Auth::user()->confirmed && $client->account->enable_client_portal)
2016-07-04 20:47:05 +02:00
<i class="fa fa-dashboard" style="width: 20px"></i><a href="{{ $contact->link }}" target="_blank">{{ trans('texts.view_client_portal') }}</a><br/>
@endif
2015-03-16 22:45:25 +01:00
@endforeach
</div>
<div class="col-md-4">
2015-03-16 22:45:25 +01:00
<h3>{{ trans('texts.standing') }}
<table class="table" style="width:100%">
2015-03-16 22:45:25 +01:00
<tr>
<td><small>{{ trans('texts.paid_to_date') }}</small></td>
2015-06-10 10:34:20 +02:00
<td style="text-align: right">{{ Utils::formatMoney($client->paid_to_date, $client->getCurrencyId()) }}</td>
2015-03-16 22:45:25 +01:00
</tr>
<tr>
<td><small>{{ trans('texts.balance') }}</small></td>
2015-06-10 10:34:20 +02:00
<td style="text-align: right">{{ Utils::formatMoney($client->balance, $client->getCurrencyId()) }}</td>
2015-03-16 22:45:25 +01:00
</tr>
@if ($credit > 0)
<tr>
<td><small>{{ trans('texts.credit') }}</small></td>
2015-06-10 10:34:20 +02:00
<td style="text-align: right">{{ Utils::formatMoney($credit, $client->getCurrencyId()) }}</td>
2015-03-16 22:45:25 +01:00
</tr>
@endif
</table>
</h3>
</div>
</div>
2015-04-21 22:09:45 +02:00
</div>
</div>
2015-03-16 22:45:25 +01:00
@if ($client->hasAddress())
<div id="map"></div>
<br/>
@endif
2015-03-16 22:45:25 +01:00
<ul class="nav nav-tabs nav-justified">
2016-03-02 14:36:42 +01:00
{!! Form::tab_link('#activity', trans('texts.activity'), true) !!}
2015-05-27 18:52:10 +02:00
@if ($hasTasks)
2016-03-02 14:36:42 +01:00
{!! Form::tab_link('#tasks', trans('texts.tasks')) !!}
2015-05-27 18:52:10 +02:00
@endif
@if ($hasQuotes && Utils::isPro())
2016-03-02 14:36:42 +01:00
{!! Form::tab_link('#quotes', trans('texts.quotes')) !!}
2015-03-16 22:45:25 +01:00
@endif
2016-03-02 14:36:42 +01:00
{!! Form::tab_link('#invoices', trans('texts.invoices')) !!}
{!! Form::tab_link('#payments', trans('texts.payments')) !!}
{!! Form::tab_link('#credits', trans('texts.credits')) !!}
2015-03-16 22:45:25 +01:00
</ul>
<div class="tab-content">
<div class="tab-pane active" id="activity">
2015-03-26 07:24:02 +01:00
{!! Datatable::table()
2015-03-16 22:45:25 +01:00
->addColumn(
trans('texts.date'),
trans('texts.message'),
trans('texts.balance'),
trans('texts.adjustment'))
->setUrl(url('api/activities/'. $client->public_id))
2015-11-29 17:00:50 +01:00
->setCustomValues('entityType', 'activity')
2015-03-16 22:45:25 +01:00
->setOptions('sPaginationType', 'bootstrap')
->setOptions('bFilter', false)
->setOptions('aaSorting', [['0', 'desc']])
2015-03-26 07:24:02 +01:00
->render('datatable') !!}
2015-03-16 22:45:25 +01:00
</div>
2015-05-27 18:52:10 +02:00
@if ($hasTasks)
<div class="tab-pane" id="tasks">
{!! Datatable::table()
->addColumn(
trans('texts.date'),
trans('texts.duration'),
trans('texts.description'),
trans('texts.status'))
->setUrl(url('api/tasks/'. $client->public_id))
2015-11-29 17:00:50 +01:00
->setCustomValues('entityType', 'tasks')
2015-05-27 18:52:10 +02:00
->setOptions('sPaginationType', 'bootstrap')
->setOptions('bFilter', false)
->setOptions('aaSorting', [['0', 'desc']])
->render('datatable') !!}
</div>
@endif
@if (Utils::hasFeature(FEATURE_QUOTES) && $hasQuotes)
2015-03-16 22:45:25 +01:00
<div class="tab-pane" id="quotes">
2015-03-26 07:24:02 +01:00
{!! Datatable::table()
2015-03-16 22:45:25 +01:00
->addColumn(
trans('texts.quote_number'),
trans('texts.quote_date'),
trans('texts.total'),
2015-09-07 11:07:55 +02:00
trans('texts.valid_until'),
2015-03-16 22:45:25 +01:00
trans('texts.status'))
->setUrl(url('api/quotes/'. $client->public_id))
2015-11-29 17:00:50 +01:00
->setCustomValues('entityType', 'quotes')
2015-03-16 22:45:25 +01:00
->setOptions('sPaginationType', 'bootstrap')
->setOptions('bFilter', false)
->setOptions('aaSorting', [['0', 'desc']])
2015-03-26 07:24:02 +01:00
->render('datatable') !!}
2015-03-16 22:45:25 +01:00
</div>
@endif
<div class="tab-pane" id="invoices">
@if ($hasRecurringInvoices)
2015-03-26 07:24:02 +01:00
{!! Datatable::table()
2015-03-16 22:45:25 +01:00
->addColumn(
trans('texts.frequency_id'),
trans('texts.start_date'),
trans('texts.end_date'),
trans('texts.invoice_total'))
->setUrl(url('api/recurring_invoices/' . $client->public_id))
2015-11-29 17:00:50 +01:00
->setCustomValues('entityType', 'recurring_invoices')
2015-03-16 22:45:25 +01:00
->setOptions('sPaginationType', 'bootstrap')
->setOptions('bFilter', false)
->setOptions('aaSorting', [['0', 'asc']])
2015-03-26 07:24:02 +01:00
->render('datatable') !!}
2015-03-16 22:45:25 +01:00
@endif
2015-03-26 07:24:02 +01:00
{!! Datatable::table()
2015-03-16 22:45:25 +01:00
->addColumn(
trans('texts.invoice_number'),
trans('texts.invoice_date'),
trans('texts.invoice_total'),
trans('texts.balance_due'),
trans('texts.due_date'),
trans('texts.status'))
->setUrl(url('api/invoices/' . $client->public_id))
2015-11-29 17:00:50 +01:00
->setCustomValues('entityType', 'invoices')
2015-03-16 22:45:25 +01:00
->setOptions('sPaginationType', 'bootstrap')
->setOptions('bFilter', false)
2015-05-10 10:45:03 +02:00
->setOptions('aaSorting', [['0', 'desc']])
2015-03-26 07:24:02 +01:00
->render('datatable') !!}
2015-03-16 22:45:25 +01:00
</div>
<div class="tab-pane" id="payments">
2015-03-26 07:24:02 +01:00
{!! Datatable::table()
2015-03-16 22:45:25 +01:00
->addColumn(
trans('texts.invoice'),
trans('texts.transaction_reference'),
trans('texts.method'),
trans('texts.source'),
2015-03-16 22:45:25 +01:00
trans('texts.payment_amount'),
trans('texts.payment_date'),
trans('texts.status'))
2015-03-16 22:45:25 +01:00
->setUrl(url('api/payments/' . $client->public_id))
2015-11-29 17:00:50 +01:00
->setCustomValues('entityType', 'payments')
2015-03-16 22:45:25 +01:00
->setOptions('sPaginationType', 'bootstrap')
->setOptions('bFilter', false)
2015-05-10 10:45:03 +02:00
->setOptions('aaSorting', [['0', 'desc']])
2015-03-26 07:24:02 +01:00
->render('datatable') !!}
2015-03-16 22:45:25 +01:00
</div>
<div class="tab-pane" id="credits">
2015-03-26 07:24:02 +01:00
{!! Datatable::table()
2015-03-16 22:45:25 +01:00
->addColumn(
trans('texts.credit_amount'),
trans('texts.credit_balance'),
trans('texts.credit_date'),
trans('texts.private_notes'))
->setUrl(url('api/credits/' . $client->public_id))
2015-11-29 17:00:50 +01:00
->setCustomValues('entityType', 'credits')
2015-03-16 22:45:25 +01:00
->setOptions('sPaginationType', 'bootstrap')
->setOptions('bFilter', false)
->setOptions('aaSorting', [['0', 'asc']])
2015-03-26 07:24:02 +01:00
->render('datatable') !!}
2015-03-16 22:45:25 +01:00
</div>
</div>
<script type="text/javascript">
2015-11-29 17:00:50 +01:00
var loadedTabs = {};
2015-03-16 22:45:25 +01:00
$(function() {
2015-04-01 17:44:55 +02:00
$('.normalDropDown:not(.dropdown-toggle)').click(function() {
2015-03-16 22:45:25 +01:00
window.location = '{{ URL::to('clients/' . $client->public_id . '/edit') }}';
});
2015-04-01 17:44:55 +02:00
$('.primaryDropDown:not(.dropdown-toggle)').click(function() {
2015-03-16 22:45:25 +01:00
window.location = '{{ URL::to('invoices/create/' . $client->public_id ) }}';
});
2015-11-11 17:24:48 +01:00
2015-11-29 17:00:50 +01:00
// load datatable data when tab is shown and remember last tab selected
2015-11-11 17:24:48 +01:00
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
var target = $(e.target).attr("href") // activated tab
2015-11-29 17:00:50 +01:00
target = target.substring(1);
2015-11-11 17:24:48 +01:00
localStorage.setItem('client_tab', target);
2015-11-29 17:00:50 +01:00
if (!loadedTabs.hasOwnProperty(target)) {
loadedTabs[target] = true;
window['load_' + target]();
2015-11-29 21:13:50 +01:00
if (target == 'invoices' && window.hasOwnProperty('load_recurring_invoices')) {
2015-11-29 17:00:50 +01:00
window['load_recurring_invoices']();
}
}
2015-11-11 17:24:48 +01:00
});
var tab = localStorage.getItem('client_tab') || '';
var selector = '.nav-tabs a[href="#' + tab.replace('#', '') + '"]';
if (tab && tab != 'activity' && $(selector).length) {
$(selector).tab('show');
2015-11-29 17:00:50 +01:00
} else {
window['load_activity']();
2015-11-11 17:24:48 +01:00
}
2015-03-16 22:45:25 +01:00
});
function onArchiveClick() {
$('#action').val('archive');
$('.mainForm').submit();
}
function onRestoreClick() {
$('#action').val('restore');
$('.mainForm').submit();
}
function onDeleteClick() {
2016-07-28 18:55:23 +02:00
sweetConfirm(function() {
2015-03-16 22:45:25 +01:00
$('#action').val('delete');
$('.mainForm').submit();
2016-07-28 18:55:23 +02:00
});
2015-03-16 22:45:25 +01:00
}
@if ($client->hasAddress())
function initialize() {
var mapCanvas = document.getElementById('map');
var mapOptions = {
zoom: {{ DEFAULT_MAP_ZOOM }},
mapTypeId: google.maps.MapTypeId.ROADMAP,
zoomControl: true,
};
var map = new google.maps.Map(mapCanvas, mapOptions)
var address = "{{ "{$client->address1} {$client->address2} {$client->city} {$client->state} {$client->postal_code} " . ($client->country ? $client->country->name : '') }}";
2016-06-20 16:14:43 +02:00
geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (status != google.maps.GeocoderStatus.ZERO_RESULTS) {
var result = results[0];
map.setCenter(result.geometry.location);
2016-06-20 16:14:43 +02:00
var infowindow = new google.maps.InfoWindow(
{ content: '<b>'+result.formatted_address+'</b>',
size: new google.maps.Size(150, 50)
});
var marker = new google.maps.Marker({
position: result.geometry.location,
2016-06-20 16:14:43 +02:00
map: map,
title:address,
2016-06-20 16:14:43 +02:00
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map, marker);
});
} else {
$('#map').hide();
}
} else {
$('#map').hide();
}
});
}
google.maps.event.addDomListener(window, 'load', initialize);
@endif
2015-03-16 22:45:25 +01:00
</script>
@stop