salix/modules/ticket/front/sale/index.html

483 lines
19 KiB
HTML
Raw Normal View History

2021-05-12 10:11:27 +00:00
<vn-crud-model
2018-07-17 06:44:31 +00:00
vn-id="model"
2020-03-18 07:35:59 +00:00
url="Tickets/{{$ctrl.$params.id}}/getSales"
2021-05-12 10:11:27 +00:00
data="$ctrl.sales"
auto-load="true">
2018-07-17 06:44:31 +00:00
</vn-crud-model>
<vn-watcher
vn-id="watcher"
data="$ctrl.sales">
</vn-watcher>
2020-05-06 12:38:09 +00:00
<div class="vn-w-xl">
<vn-card class="vn-pa-lg">
<vn-horizontal class="header">
<vn-tool-bar class="vn-mb-md">
<vn-button
2020-06-23 11:40:49 +00:00
disabled="!$ctrl.isEditable || $ctrl.ticketState == 'OK'"
label="Ok"
2020-06-23 11:40:49 +00:00
vn-http-click="$ctrl.changeState('OK')"
vn-tooltip="Change ticket state to 'Ok'">
</vn-button>
<vn-button-menu
disabled="!$ctrl.isEditable"
label="State"
2020-06-23 11:40:49 +00:00
value-field="code"
url="States/editableStates"
2020-06-23 11:40:49 +00:00
on-change="$ctrl.changeState(value)">
</vn-button-menu>
2020-06-23 11:40:49 +00:00
<vn-button icon="keyboard_arrow_down"
label="More"
ng-click="moreOptions.show($event)"
2020-06-29 09:43:53 +00:00
ng-show="$ctrl.hasSelectedSales()">
2020-06-23 11:40:49 +00:00
</vn-button>
<vn-button
2020-06-29 09:43:53 +00:00
disabled="!$ctrl.hasSelectedSales() || !$ctrl.isEditable"
ng-click="deleteLines.show()"
vn-tooltip="Remove lines"
icon="delete">
</vn-button>
<vn-button
2020-06-29 09:43:53 +00:00
disabled="!$ctrl.hasSelectedSales() || !$ctrl.isEditable"
2020-05-25 12:45:26 +00:00
ng-click="$ctrl.showTransferPopover($event)"
vn-tooltip="Transfer lines"
icon="call_split">
</vn-button>
</vn-tool-bar>
<vn-one class="taxes" ng-if="$ctrl.sales.length > 0">
<p><vn-label translate>Subtotal</vn-label> {{$ctrl.ticket.totalWithoutVat | currency: 'EUR':2}}</p>
<p><vn-label translate>VAT</vn-label> {{$ctrl.ticket.totalWithVat - $ctrl.ticket.totalWithoutVat | currency: 'EUR':2}}</p>
<p><vn-label><strong>Total</strong></vn-label> <strong>{{$ctrl.ticket.totalWithVat | currency: 'EUR':2}}</strong></p>
</vn-one>
</vn-horizontal>
<vn-table model="model">
<vn-thead>
<vn-tr>
<vn-th shrink>
<vn-multi-check model="model"
on-change="$ctrl.resetChanges()">
</vn-multi-check>
</vn-th>
<vn-th shrink></vn-th>
<vn-th shrink></vn-th>
<vn-th shrink>Visible</vn-th>
2021-06-24 07:16:59 +00:00
<vn-th shrink>Available</vn-th>
<vn-th>Id</vn-th>
2021-01-28 14:10:47 +00:00
<vn-th shrink>Quantity</vn-th>
2021-06-24 07:16:59 +00:00
<vn-th expand>Item</vn-th>
<vn-th number>Price</vn-th>
<vn-th number>Disc</vn-th>
<vn-th number>Amount</vn-th>
2021-06-22 12:27:45 +00:00
<vn-th shrink>Packing</vn-th>
</vn-tr>
</vn-thead>
<vn-tbody>
<vn-tr ng-repeat="sale in $ctrl.sales">
<vn-td shrink>
<vn-check tabindex="-1"
ng-model="sale.checked">
</vn-check>
</vn-td>
<vn-td shrink>
<a ui-sref="claim.card.basicData({id: sale.claim.claimFk})">
2020-06-23 11:40:49 +00:00
<vn-icon icon="icon-claims"
ng-show="sale.claim.claimFk"
vn-tooltip="{{::$ctrl.$t('Claim')}}: {{::sale.claim.claimFk}}">
</vn-icon>
</a>
<vn-icon
2021-05-25 08:01:18 +00:00
ng-show="::(sale.visible < 0)"
color-main
icon="warning"
2021-05-25 08:01:18 +00:00
vn-tooltip="Visible: {{::sale.visible || 0}}">
</vn-icon>
<vn-icon ng-show="sale.reserved"
icon="icon-reserve"
2021-05-27 09:41:45 +00:00
translate-attr="{title: 'Reserved'}">
</vn-icon>
<vn-icon
ng-show="::sale.isAvailable === 0"
translate-attr="{title: 'Not available'}"
class="bright"
icon="icon-unavailable">
</vn-icon>
<vn-icon
2021-05-25 08:01:18 +00:00
ng-show="::sale.hasComponentLack"
translate-attr="{title: 'Component lack'}"
class="bright"
2021-05-25 08:01:18 +00:00
icon="icon-components">
</vn-icon>
2019-09-06 09:43:15 +00:00
</vn-td>
2021-04-28 08:32:24 +00:00
<vn-td shrink>
<img
ng-src="{{::$root.imagePath('catalog', '50x50', sale.itemFk)}}"
zoom-image="{{::$root.imagePath('catalog', '1600x900', sale.itemFk)}}"
on-error-src/>
</vn-td>
<vn-td shrink>
<vn-chip
class="transparent"
ng-class="{'alert': sale.visible < 0}">
{{::sale.visible}}
</vn-chip>
</vn-td>
2021-06-24 07:16:59 +00:00
<vn-td shrink>
2021-05-25 08:01:18 +00:00
<vn-chip
class="transparent"
2021-06-01 09:39:40 +00:00
ng-class="{'alert': sale.available < 0}">
2021-05-25 08:01:18 +00:00
{{::sale.available}}
</vn-chip>
</vn-td>
2021-06-24 07:16:59 +00:00
<vn-td>
2021-04-28 08:32:24 +00:00
<span class="link" ng-if="sale.id"
ng-click="itemDescriptor.show($event, sale.itemFk, sale.id)">
2021-04-28 08:32:24 +00:00
{{sale.itemFk}}
</span>
<vn-autocomplete ng-if="!sale.id" class="dense"
vn-focus
url="Items/withName"
2021-04-28 08:32:24 +00:00
ng-model="sale.itemFk"
show-field="name"
value-field="id"
search-function="$ctrl.itemSearchFunc($search)"
on-change="$ctrl.changeQuantity(sale)"
order="id DESC"
tabindex="1">
<tpl-item>
{{::id}} - {{::name}}
</tpl-item>
</vn-autocomplete>
</vn-td>
<vn-td-editable disabled="!$ctrl.isEditable" shrink>
<text>{{sale.quantity}}</text>
<field>
<vn-input-number class="dense"
vn-focus
ng-model="sale.quantity"
on-change="$ctrl.changeQuantity(sale)">
</vn-input-number>
</field>
</vn-td-editable>
2021-06-24 07:16:59 +00:00
<vn-td-editable vn-fetched-tags expand disabled="!sale.id || !$ctrl.isEditable">
2021-04-28 08:32:24 +00:00
<text>
<vn-one title="{{sale.concept}}">{{sale.concept}}</vn-one>
<vn-one ng-if="::sale.subName">
<h3 title="{{::sale.subName}}">{{::sale.subName}}</h3>
</vn-one>
<vn-fetched-tags
max-length="6"
item="::sale.item"
tabindex="-1">
</vn-fetched-tags>
</text>
<field>
<vn-textfield class="dense" vn-focus
vn-id="concept"
ng-model="sale.concept"
on-change="$ctrl.updateConcept(sale)">
</vn-textfield>
</field>
</vn-td-editable>
<vn-td number>
<span ng-class="{'link': $ctrl.isEditable}"
translate-attr="{title: $ctrl.isEditable ? 'Edit price' : ''}"
ng-click="$ctrl.showEditPricePopover($event, sale)">
{{sale.price | currency: 'EUR':2}}
</span>
</vn-td>
<vn-td number>
<span ng-class="{'link': !$ctrl.isLocked}"
translate-attr="{title: !$ctrl.isLocked ? 'Edit discount' : ''}"
ng-click="$ctrl.showEditDiscountPopover($event, sale)"
ng-if="sale.id">
{{(sale.discount / 100) | percentage}}
</span>
</vn-td>
<vn-td number>
{{$ctrl.getSaleTotal(sale) | currency: 'EUR':2}}
</vn-td>
2021-06-22 12:27:45 +00:00
<vn-td shrink>
{{::sale.item.itemPackingTypeFk | dashIfEmpty}}
</vn-td>
2021-04-28 08:32:24 +00:00
</vn-tr>
</vn-tbody>
</vn-table>
2020-05-06 12:38:09 +00:00
<div>
<vn-icon-button
vn-none
vn-tooltip="Add item"
vn-bind="+"
icon="add_circle"
ng-click="$ctrl.add()"
disabled="!$ctrl.isEditable">
</vn-icon-button>
2020-05-06 12:38:09 +00:00
</div>
2018-03-22 17:02:48 +00:00
</vn-card>
2020-05-06 12:38:09 +00:00
</div>
2019-10-11 15:38:04 +00:00
<vn-float-button
ng-show="$ctrl.isEditable"
ng-click="$ctrl.newOrderFromTicket()"
icon="add"
2020-06-30 08:01:30 +00:00
vn-tooltip="Add item to basket"
2019-10-11 15:38:04 +00:00
vn-bind="+"
fixed-bottom-right>
</vn-float-button>
<vn-item-descriptor-popover
vn-id="item-descriptor"
warehouse-fk="$ctrl.ticket.warehouseFk",
ticket-fk="$ctrl.ticket.id">
2019-10-11 15:38:04 +00:00
</vn-item-descriptor-popover>
2020-06-23 11:40:49 +00:00
<!-- Price Popover -->
2019-10-26 23:30:01 +00:00
<vn-popover
2019-10-11 15:38:04 +00:00
vn-id="edit-price-popover"
2020-06-29 07:38:42 +00:00
on-open="$ctrl.getMana()">
<div class="edit-popover">
2020-06-23 11:40:49 +00:00
<vn-spinner class="vn-pa-xs"
ng-if="$ctrl.edit.mana == null"
2019-02-26 16:32:32 +00:00
enable="true">
</vn-spinner>
2020-06-23 11:40:49 +00:00
<div ng-if="$ctrl.edit.mana != null">
<section class="header vn-pa-md">
2020-06-30 08:01:30 +00:00
<h5>MANÁ: {{::$ctrl.edit.mana | currency: 'EUR': 0}}</h5>
</section>
<div class="vn-pa-md">
2019-05-29 10:41:26 +00:00
<vn-input-number
2019-02-26 16:32:32 +00:00
vn-focus
label="Price"
2020-06-23 11:40:49 +00:00
ng-model="$ctrl.edit.price"
2019-05-29 10:41:26 +00:00
step="0.01"
on-change="$ctrl.updatePrice()"
suffix="€">
2019-05-29 10:41:26 +00:00
</vn-input-number>
2019-02-26 16:32:32 +00:00
<div class="simulator">
<p class="simulatorTitle" translate>New price</p>
2020-06-23 11:40:49 +00:00
<p>
<strong>{{$ctrl.getNewPrice() | currency: 'EUR': 2}}</strong>
</p>
2019-02-26 16:32:32 +00:00
</div>
</div>
</div>
2019-10-11 15:38:04 +00:00
</div>
</vn-popover>
2020-06-23 11:40:49 +00:00
<!-- Discount popover -->
2019-10-26 23:30:01 +00:00
<vn-popover
2020-06-23 11:40:49 +00:00
vn-id="editDiscount"
2020-06-29 07:38:42 +00:00
on-open="$ctrl.getMana()">
<div class="edit-popover">
2020-06-23 11:40:49 +00:00
<vn-spinner class="vn-pa-xs"
ng-if="$ctrl.edit.mana == null"
2019-02-26 16:32:32 +00:00
enable="true">
</vn-spinner>
2020-06-23 11:40:49 +00:00
<div ng-if="$ctrl.edit.mana != null">
<section class="header vn-pa-md">
2020-06-30 08:01:30 +00:00
<h5>Mana: {{::$ctrl.edit.mana | currency: 'EUR':0}}</h5>
2020-06-23 11:40:49 +00:00
</section>
<div class="vn-pa-md">
<vn-input-number
vn-focus
label="Discount"
ng-model="$ctrl.edit.discount"
on-change="$ctrl.changeDiscount()"
suffix="%">
</vn-input-number>
<div class="simulator">
<p class="simulatorTitle" translate>New price</p>
<p>
<strong>{{$ctrl.getNewPrice() | currency: 'EUR': 2}}</strong>
</p>
</div>
</div>
</div>
2019-10-11 15:38:04 +00:00
</div>
</vn-popover>
2020-06-23 11:40:49 +00:00
<!-- Multiple discount dialog -->
<vn-dialog vn-id="editDiscountDialog"
on-open="$ctrl.getMana()"
message="Edit discount">
<tpl-body>
<vn-spinner class="vn-pa-xs"
ng-if="$ctrl.edit.mana == null"
enable="true">
</vn-spinner>
<div ng-if="$ctrl.edit.mana != null">
<div class="vn-pa-md">
<vn-input-number vn-focus
label="Discount"
ng-model="$ctrl.edit.discount"
on-change="$ctrl.changeMultipleDiscount()"
suffix="%">
</vn-input-number>
</div>
<section class="header vn-pa-md">
2020-06-30 08:01:30 +00:00
<span>Mana: <strong>{{::$ctrl.edit.mana | currency: 'EUR': 0}}</strong></span>
2020-06-23 11:40:49 +00:00
</section>
</div>
</tpl-body>
</vn-dialog>
2019-10-11 15:38:04 +00:00
<!-- Transfer Popover -->
<vn-popover vn-id="transfer">
<div class="vn-pa-lg transfer">
2019-10-11 15:38:04 +00:00
<vn-horizontal>
<vn-one>
<h4 translate>Sales to transfer</h4>
<vn-table>
<vn-thead>
<vn-tr>
<vn-th number shrink>Id</vn-th>
<vn-th>Item</vn-th>
<vn-th number shrink>Quantity</vn-th>
</vn-tr>
</vn-thead>
<vn-tbody>
<vn-tr ng-repeat="sale in $ctrl.transfer.sales">
<vn-td number shrink>{{::sale.itemFk | zeroFill:6}}</vn-td>
<vn-td>
<span title="{{::sale.concept}}">{{::sale.concept}}</span>
</vn-td>
<vn-td-editable number shrink>
<text>{{sale.quantity}}</text>
<field>
<vn-input-number
vn-focus
ng-model="sale.quantity">
</vn-input-number>
</field>
</vn-td-editable>
</vn-tr>
</vn-tbody>
</vn-table>
</vn-one>
<vn-one>
<vn-horizontal>
2019-10-11 15:38:04 +00:00
<h4 vn-one translate>Destination ticket</h4>
<vn-icon vn-none
2019-11-10 10:08:44 +00:00
color-marginal
2019-10-11 15:38:04 +00:00
vn-tooltip="You have to allow pop-ups in your web browser to use this functionality"
icon="info">
</vn-icon>
</vn-horizontal>
<table class="destinationTable vn-table">
<thead>
<tr>
<th translate shrink>Id</th>
<th translate>Shipped</th>
<th translate shrink>Agency</th>
<th translate expand>Address</th>
</tr>
</thead>
<tbody>
<tr
2019-10-11 15:38:04 +00:00
class="clickable"
ng-repeat="ticket in $ctrl.transfer.lastActiveTickets track by ticket.id"
ng-click="$ctrl.transferSales(ticket.id)">
<td shrink>{{::ticket.id}}</td>
<td>{{::ticket.shipped | date: 'dd/MM/yyyy'}}</td>
<td shrink>{{::ticket.agencyName}}</td>
<td expand>{{::ticket.address}}
2021-02-12 15:41:29 +00:00
<span vn-tooltip="
{{::ticket.nickname}}
{{::ticket.name}}
{{::ticket.street}}
{{::ticket.postalCode}}
{{::ticket.city}}">
2021-02-12 15:41:29 +00:00
{{::ticket.nickname}}
{{::ticket.name}}
{{::ticket.street}}
{{::ticket.postalCode}}
{{::ticket.city}}
</span>
</td>
</tr>
<tr>
<td
2021-02-12 15:41:29 +00:00
ng-if="!$ctrl.transfer.lastActiveTickets.length"
class="empty-rows"
colspan="4"
translate>
No results
</td>
</tr>
</tbody>
</table>
2020-02-11 07:19:03 +00:00
<form name="form">
<vn-horizontal class="vn-py-md">
<vn-input-number vn-one
label="Transfer to ticket"
ng-model="$ctrl.transfer.ticketId"
type="number">
</vn-input-number>
<vn-icon-button vn-none
icon="arrow_forward_ios"
ng-click="$ctrl.transferSales($ctrl.transfer.ticketId)">
</vn-icon-button>
</vn-horizontal>
</form>
2019-10-11 15:38:04 +00:00
<vn-horizontal class="vn-py-md">
<vn-button
label="New ticket"
ng-click="$ctrl.transferSales()">
</vn-button>
</vn-horizontal>
</vn-one>
</vn-horizontal>
</div>
</vn-popover>
<!-- SMS Dialog -->
2020-02-10 08:36:40 +00:00
<vn-ticket-sms
2019-10-11 15:38:04 +00:00
vn-id="sms"
sms="$ctrl.newSMS">
2020-02-10 08:36:40 +00:00
</vn-ticket-sms>
2019-06-05 11:39:15 +00:00
<vn-confirm
vn-id="delete-lines"
question="You are going to delete lines of the ticket"
message="Continue anyway?"
2020-07-29 08:47:48 +00:00
on-accept="$ctrl.removeSales()">
</vn-confirm>
2019-10-11 15:38:04 +00:00
2019-06-05 11:39:15 +00:00
<vn-confirm
vn-id="delete-ticket"
question="Do you want to delete it?"
message="This ticket is now empty"
2020-07-29 08:47:48 +00:00
on-accept="$ctrl.transferSales($ctrl.transfer.ticketId)">
2020-06-23 11:40:49 +00:00
</vn-confirm>
<vn-menu vn-id="moreOptions">
<vn-item translate
2020-06-30 09:15:20 +00:00
name="sms"
2020-06-23 11:40:49 +00:00
ng-click="$ctrl.showSMSDialog()">
Send shortage SMS
</vn-item>
<vn-item translate
2020-06-30 09:15:20 +00:00
name="calculatePrice"
2020-06-23 11:40:49 +00:00
ng-click="$ctrl.calculateSalePrice()"
ng-if="$ctrl.isEditable && $ctrl.hasOneSaleSelected()">
Recalculate price
</vn-item>
<vn-item translate
2020-06-30 09:15:20 +00:00
name="discount"
2020-06-23 11:40:49 +00:00
ng-click="$ctrl.showEditDiscountDialog($event)">
Update discount
</vn-item>
<vn-item translate
2020-06-30 09:15:20 +00:00
name="claim"
2020-06-23 11:40:49 +00:00
ng-click="$ctrl.createClaim()">
Add claim
</vn-item>
<vn-item translate
2020-07-01 12:45:48 +00:00
name="reserve"
2020-06-23 11:40:49 +00:00
ng-click="$ctrl.markAsReserved()"
ng-if="$ctrl.isEditable">
Mark as reserved
</vn-item>
<vn-item translate
2020-07-01 12:45:48 +00:00
name="unreserve"
2020-06-23 11:40:49 +00:00
ng-click="$ctrl.unmarkAsReserved()"
ng-if="$ctrl.isEditable && $ctrl.hasReserves()">
Unmark as reserved
</vn-item>
</vn-menu>