410 lines
17 KiB
HTML
410 lines
17 KiB
HTML
<vn-crud-model
|
|
vn-id="ticketsModel"
|
|
url="Tickets"
|
|
link="{clientFk: $ctrl.client.id}"
|
|
filter="::$ctrl.ticketFilter"
|
|
limit="10"
|
|
data="tickets"
|
|
order="shipped DESC, id">
|
|
</vn-crud-model>
|
|
<vn-card class="summary">
|
|
<h5>
|
|
<a ng-if="::$ctrl.summary.id"
|
|
vn-tooltip="Go to the client"
|
|
ui-sref="client.card.summary({id: {{::$ctrl.summary.id}}})"
|
|
name="goToSummary">
|
|
<vn-icon-button icon="launch"></vn-icon-button>
|
|
</a>
|
|
<span>
|
|
{{$ctrl.summary.name}} - {{$ctrl.summary.id}} - {{$ctrl.summary.salesPersonUser.name}}
|
|
</span>
|
|
</h5>
|
|
<vn-horizontal>
|
|
<vn-one>
|
|
<h4 ng-show="$ctrl.isEmployee">
|
|
<a
|
|
ui-sref="client.card.basicData({id:$ctrl.client.id})"
|
|
target="_self">
|
|
<span translate vn-tooltip="Go to">Basic data</span>
|
|
</a>
|
|
</h4>
|
|
<h4
|
|
translate
|
|
ng-show="!$ctrl.isEmployee">
|
|
Basic data
|
|
</h4>
|
|
<vn-label-value label="Id"
|
|
value="{{$ctrl.summary.id}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="Comercial Name"
|
|
value="{{$ctrl.summary.name}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="Contact"
|
|
value="{{$ctrl.summary.contact}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="Phone"
|
|
value="{{$ctrl.summary.phone}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="Mobile"
|
|
value="{{$ctrl.summary.mobile}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="Email" no-ellipsize
|
|
value="{{$ctrl.listEmails($ctrl.summary.email)}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="Sales person">
|
|
<span
|
|
ng-click="workerDescriptor.show($event, $ctrl.summary.salesPersonFk)"
|
|
class="link">
|
|
{{$ctrl.summary.salesPersonUser.name}}
|
|
</span>
|
|
</vn-label-value>
|
|
<vn-label-value label="Channel"
|
|
value="{{$ctrl.summary.contactChannel.name}}">
|
|
</vn-label-value>
|
|
</vn-one>
|
|
<vn-one>
|
|
<h4 ng-show="$ctrl.isEmployee">
|
|
<a
|
|
ui-sref="client.card.fiscalData({id:$ctrl.client.id})"
|
|
target="_self">
|
|
<span translate vn-tooltip="Go to">Fiscal address</span>
|
|
</a>
|
|
</h4>
|
|
<h4
|
|
translate
|
|
ng-show="!$ctrl.isEmployee">
|
|
Fiscal address
|
|
</h4>
|
|
<vn-label-value label="Social name"
|
|
value="{{$ctrl.summary.socialName}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="NIF / CIF"
|
|
value="{{$ctrl.summary.fi}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="City"
|
|
value="{{$ctrl.summary.city}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="Postcode"
|
|
value="{{$ctrl.summary.postcode}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="Province"
|
|
value="{{$ctrl.summary.province.name}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="Country"
|
|
value="{{$ctrl.summary.country.country}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="Street" no-ellipsize
|
|
value="{{$ctrl.summary.street}}">
|
|
</vn-label-value>
|
|
</vn-one>
|
|
<vn-one>
|
|
<h4 ng-show="$ctrl.isEmployee">
|
|
<a
|
|
ui-sref="client.card.fiscalData({id:$ctrl.client.id})"
|
|
target="_self">
|
|
<span translate vn-tooltip="Go to">Fiscal data</span>
|
|
</a>
|
|
</h4>
|
|
<h4
|
|
translate
|
|
ng-show="!$ctrl.isEmployee">
|
|
Fiscal data
|
|
</h4>
|
|
<vn-vertical>
|
|
<vn-check
|
|
label="Is equalizated"
|
|
ng-model="$ctrl.summary.isEqualizated"
|
|
disabled="true">
|
|
</vn-check>
|
|
<vn-check
|
|
label="Active"
|
|
ng-model="$ctrl.summary.isActive"
|
|
disabled="true">
|
|
</vn-check>
|
|
<vn-check
|
|
label="Invoice by address"
|
|
ng-model="$ctrl.summary.hasToInvoiceByAddress"
|
|
disabled="true">
|
|
</vn-check>
|
|
<vn-check
|
|
label="Verified data"
|
|
ng-model="$ctrl.summary.isTaxDataChecked"
|
|
disabled="true">
|
|
</vn-check>
|
|
<vn-check
|
|
label="Has to invoice"
|
|
ng-model="$ctrl.summary.hasToInvoice"
|
|
disabled="true">
|
|
</vn-check>
|
|
<vn-check
|
|
label="Notify by email"
|
|
ng-model="$ctrl.summary.isToBeMailed"
|
|
disabled="true">
|
|
</vn-check>
|
|
<vn-check
|
|
label="Vies"
|
|
ng-model="$ctrl.summary.isVies"
|
|
disabled="true">
|
|
</vn-check>
|
|
</vn-vertical>
|
|
</vn-one>
|
|
<vn-one>
|
|
<h4 ng-show="$ctrl.isEmployee">
|
|
<a
|
|
ui-sref="client.card.billingData({id:$ctrl.client.id})"
|
|
target="_self">
|
|
<span translate vn-tooltip="Go to">Billing data</span>
|
|
</a>
|
|
</h4>
|
|
<h4
|
|
translate
|
|
ng-show="!$ctrl.isEmployee">
|
|
Billing data
|
|
</h4>
|
|
<vn-label-value label="Pay method"
|
|
value="{{$ctrl.summary.payMethod.name}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="IBAN"
|
|
value="{{$ctrl.summary.iban}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="Due day"
|
|
value="{{$ctrl.summary.dueDay}}">
|
|
</vn-label-value>
|
|
<vn-vertical>
|
|
<vn-check
|
|
label="Received LCR"
|
|
ng-model="$ctrl.summary.hasLcr"
|
|
disabled="true">
|
|
</vn-check>
|
|
<vn-check
|
|
label="Received core VNL"
|
|
ng-model="$ctrl.summary.hasCoreVnl"
|
|
disabled="true">
|
|
</vn-check>
|
|
<vn-check
|
|
label="Received B2B VNL"
|
|
ng-model="$ctrl.summary.hasSepaVnl"
|
|
disabled="true">
|
|
</vn-check>
|
|
</vn-vertical>
|
|
</vn-one>
|
|
<vn-one>
|
|
<h4 ng-show="$ctrl.isEmployee">
|
|
<a
|
|
ui-sref="client.card.address.index({id:$ctrl.client.id})"
|
|
target="_self">
|
|
<span translate vn-tooltip="Go to">Address</span>
|
|
</a>
|
|
</h4>
|
|
<h4
|
|
translate
|
|
ng-show="!$ctrl.isEmployee">
|
|
Address
|
|
</h4>
|
|
<vn-label-value label="Name"
|
|
value="{{$ctrl.summary.defaultAddress.nickname}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="City"
|
|
value="{{$ctrl.summary.defaultAddress.city}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="Street" no-ellipsize
|
|
value="{{$ctrl.summary.defaultAddress.street}}">
|
|
</vn-label-value>
|
|
</vn-one>
|
|
<vn-one>
|
|
<h4 ng-show="$ctrl.isEmployee">
|
|
<a
|
|
ui-sref="client.card.webAccess({id:$ctrl.client.id})"
|
|
target="_self">
|
|
<span translate vn-tooltip="Go to">Web access</span>
|
|
</a>
|
|
</h4>
|
|
<h4
|
|
translate
|
|
ng-show="!$ctrl.isEmployee">Web access
|
|
</h4>
|
|
<vn-label-value label="User"
|
|
value="{{$ctrl.summary.account.name}}">
|
|
</vn-label-value>
|
|
<vn-vertical>
|
|
<vn-check
|
|
label="Enable web access"
|
|
ng-model="$ctrl.summary.account.active"
|
|
disabled="true">
|
|
</vn-check>
|
|
</vn-vertical>
|
|
</vn-one>
|
|
<vn-one>
|
|
<h4 translate>Business data</h4>
|
|
<vn-label-value label="Total greuge"
|
|
value="{{$ctrl.summary.totalGreuge | currency: 'EUR':2}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="Mana"
|
|
value="{{$ctrl.summary.mana.mana | currency: 'EUR':2}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="Rate"
|
|
value="{{$ctrl.claimRate($ctrl.summary.claimsRatio.priceIncreasing / 100) | percentage}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="Average invoiced"
|
|
value="{{$ctrl.summary.averageInvoiced.invoiced | currency: 'EUR':2}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="Claims"
|
|
value="{{$ctrl.claimingRate($ctrl.summary.claimsRatio.claimingRate) | percentage}}">
|
|
</vn-label-value>
|
|
</vn-one>
|
|
<vn-one>
|
|
<h4 ng-show="$ctrl.isEmployee">
|
|
<a target="_blank"
|
|
href="https://grafana.verdnatura.es/d/40buzE4Vk/comportamiento-pagos-clientes?orgId=1&var-clientFk={{::$ctrl.client.id}}">
|
|
<span translate vn-tooltip="Go to grafana">Financial information</span>
|
|
</a>
|
|
</h4>
|
|
<vn-label-value label="Risk"
|
|
value="{{$ctrl.summary.debt.debt | currency: 'EUR':2}}"
|
|
ng-class="{alert: $ctrl.summary.debt.debt > $ctrl.summary.credit}"
|
|
info="Invoices minus payments plus orders not yet invoiced">
|
|
</vn-label-value>
|
|
<vn-label-value label="Credit"
|
|
value="{{$ctrl.summary.credit | currency: 'EUR':2 }} "
|
|
ng-class="{alert: $ctrl.summary.credit > $ctrl.summary.creditInsurance ||
|
|
($ctrl.summary.credit && $ctrl.summary.creditInsurance == null)}"
|
|
info="Verdnatura's maximum risk">
|
|
</vn-label-value>
|
|
<vn-label-value label="Secured credit"
|
|
value="{{$ctrl.summary.creditInsurance | currency: 'EUR':2}} ({{$ctrl.summary.classifications[0].insurances[0].grade}})"
|
|
info="Solunion's maximum risk">
|
|
</vn-label-value>
|
|
<vn-label-value label="Balance"
|
|
value="{{$ctrl.summary.sumRisk | currency: 'EUR':2}}"
|
|
info="Invoices minus payments">
|
|
</vn-label-value>
|
|
<vn-label-value label="Balance due"
|
|
value="{{($ctrl.summary.defaulters[0].amount >= 0 ? $ctrl.summary.defaulters[0].amount : '-') | currency: 'EUR':2}}"
|
|
ng-class="{alert: $ctrl.summary.defaulters[0].amount}"
|
|
info="Deviated invoices minus payments">
|
|
</vn-label-value>
|
|
<vn-label-value label="Recovery since"
|
|
ng-if="$ctrl.summary.recovery.started"
|
|
value="{{$ctrl.summary.recovery.started | date:'dd/MM/yyyy'}}">
|
|
</vn-label-value>
|
|
<vn-label-value label="Rating"
|
|
value="{{$ctrl.summary.rating}}"
|
|
info="Value from 1 to 20. The higher the better value">
|
|
</vn-label-value>
|
|
</vn-one>
|
|
</vn-horizontal>
|
|
<vn-horizontal>
|
|
<vn-one>
|
|
<h4 translate>Latest tickets</h4>
|
|
<vn-table model="ticketsModel">
|
|
<vn-thead>
|
|
<vn-tr>
|
|
<vn-th field="id" number>Id</vn-th>
|
|
<vn-th field="nickname" expand>Nickname</vn-th>
|
|
<vn-th field="agencyModeFk" expand>Agency</vn-th>
|
|
<vn-th field="routeFk" expand>Route</vn-th>
|
|
<vn-th field="packages" shrink>Packages</vn-th>
|
|
<vn-th field="shipped" shrink-date>Date</vn-th>
|
|
<vn-th field="stateFk">State</vn-th>
|
|
<vn-th field="totalWithVat" shrink>Total</vn-th>
|
|
<vn-th></vn-th>
|
|
</vn-tr>
|
|
</vn-thead>
|
|
<vn-tbody>
|
|
<a ng-repeat="ticket in ticketsModel.data"
|
|
class="clickable vn-tr search-result"
|
|
ui-sref="ticket.card.summary({id: {{::ticket.id}}})">
|
|
<vn-td number>{{::ticket.id}}</vn-td>
|
|
<vn-td expand>
|
|
<span
|
|
title="{{::ticket.nickname}}"
|
|
vn-click-stop="clientDescriptor.show($event, ticket.clientFk)"
|
|
class="link">
|
|
{{::ticket.nickname}}
|
|
</span>
|
|
</vn-td>
|
|
<vn-td expand>
|
|
{{::ticket.agencyMode.name}}
|
|
</vn-td>
|
|
<vn-td shrink>
|
|
<span
|
|
title="{{::ticket.route}}"
|
|
vn-click-stop="routeDescriptor.show($event, ticket.routeFk)"
|
|
class="link">
|
|
{{::ticket.routeFk}}
|
|
</span>
|
|
</vn-td>
|
|
<vn-td shrink>
|
|
{{::ticket.packages}}
|
|
</vn-td>
|
|
<vn-td shrink-date>
|
|
<span class="chip {{::$ctrl.chipColor(ticket.shipped)}}">
|
|
{{::ticket.shipped | date: 'dd/MM/yyyy'}}
|
|
</span>
|
|
</vn-td>
|
|
<vn-td>
|
|
<span
|
|
ng-show="::ticket.refFk"
|
|
title="{{::ticket.refFk}}"
|
|
vn-click-stop="invoiceOutDescriptor.show($event, ticket.invoiceOut.id)"
|
|
class="link">
|
|
{{::ticket.refFk}}
|
|
</span>
|
|
<span
|
|
ng-show="::!ticket.refFk"
|
|
class="chip {{::$ctrl.stateColor(ticket)}}">
|
|
{{::ticket.ticketState.state.name}}
|
|
</span>
|
|
</vn-td>
|
|
<vn-td shrink>
|
|
<span class="chip {{::$ctrl.totalPriceColor(ticket)}}">
|
|
{{::(ticket.totalWithVat ? ticket.totalWithVat : 0) | currency: 'EUR': 2}}
|
|
</span>
|
|
</vn-td>
|
|
<vn-td actions>
|
|
<vn-icon-button
|
|
vn-anchor="::{
|
|
state: 'ticket.card.sale',
|
|
params: {id: ticket.id},
|
|
target: '_blank'
|
|
}"
|
|
vn-tooltip="Go to lines"
|
|
icon="icon-lines">
|
|
</vn-icon-button>
|
|
<vn-icon-button
|
|
vn-click-stop="$ctrl.preview(ticket)"
|
|
vn-tooltip="Preview"
|
|
icon="preview">
|
|
</vn-icon-button>
|
|
</vn-td>
|
|
</a>
|
|
</vn-tbody>
|
|
</vn-table>
|
|
<vn-pagination
|
|
model="ticketsModel"
|
|
class="vn-pt-xs"
|
|
scroll-selector="vn-table[model='ticketsModel']"
|
|
scroll-offset="100">
|
|
</vn-pagination>
|
|
</vn-one>
|
|
</vn-horizontal>
|
|
</vn-card>
|
|
<vn-client-descriptor-popover
|
|
vn-id="clientDescriptor">
|
|
</vn-client-descriptor-popover>
|
|
<vn-route-descriptor-popover
|
|
vn-id="routeDescriptor">
|
|
</vn-route-descriptor-popover>
|
|
<vn-worker-descriptor-popover
|
|
vn-id="workerDescriptor">
|
|
</vn-worker-descriptor-popover>
|
|
<vn-invoice-out-descriptor-popover
|
|
vn-id="invoiceOutDescriptor">
|
|
</vn-invoice-out-descriptor-popover>
|
|
<vn-popup vn-id="summary">
|
|
<vn-ticket-summary
|
|
ticket="$ctrl.selectedTicket"
|
|
model="model">
|
|
</vn-ticket-summary>
|
|
</vn-popup>
|