2018-03-22 17:02:48 +00:00
|
|
|
import ngModule from '../module';
|
2018-06-06 14:54:40 +00:00
|
|
|
import './style.scss';
|
2018-03-22 17:02:48 +00:00
|
|
|
|
2018-07-04 12:41:01 +00:00
|
|
|
class Controller {
|
2018-06-28 13:17:50 +00:00
|
|
|
constructor($scope, $timeout, $stateParams, $http, vnApp, $translate) {
|
2018-04-26 14:41:08 +00:00
|
|
|
this.$ = $scope;
|
2018-06-06 14:54:40 +00:00
|
|
|
this.vnApp = vnApp;
|
2018-06-28 13:17:50 +00:00
|
|
|
this.translate = $translate;
|
2018-04-26 14:41:08 +00:00
|
|
|
this.$timeout = $timeout;
|
2018-06-06 14:54:40 +00:00
|
|
|
this.$state = $stateParams;
|
2018-05-08 07:25:15 +00:00
|
|
|
this.$http = $http;
|
2018-06-06 14:54:40 +00:00
|
|
|
this.deletable = false;
|
2018-06-28 13:17:50 +00:00
|
|
|
this.edit = {};
|
2018-06-06 14:54:40 +00:00
|
|
|
this.moreOptions = [
|
2018-07-02 11:18:22 +00:00
|
|
|
{callback: this.showAddTurnDialog, name: "Add turn", always: true},
|
|
|
|
{callback: this.showDeleteTicketDialog, name: "Delete ticket", always: true},
|
|
|
|
{callback: this.markAsReserved, name: 'Mark as reserved'},
|
|
|
|
{callback: this.unmarkAsReserved, name: 'Unmark as reserved'},
|
|
|
|
{callback: this.showEditDialog, name: 'Update discount'}
|
2018-06-06 14:54:40 +00:00
|
|
|
];
|
|
|
|
}
|
|
|
|
|
2018-07-04 12:41:01 +00:00
|
|
|
getSales() {
|
|
|
|
this.$http.get(`/api/Tickets/${this.ticket.id}/getSales`).then(res => {
|
|
|
|
this.sales = res.data;
|
|
|
|
this.getTaxes();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
$onChanges() {
|
|
|
|
if (this.ticket)
|
|
|
|
this.getSales(this.ticket.clientFk);
|
|
|
|
}
|
2018-07-02 11:18:22 +00:00
|
|
|
onMoreOpen() {
|
|
|
|
let options = this.moreOptions.filter(o => o.always || this.isChecked);
|
|
|
|
this.$.moreButton.data = options;
|
|
|
|
}
|
|
|
|
|
2018-06-19 10:10:38 +00:00
|
|
|
getTaxes() {
|
|
|
|
this.getSubTotal();
|
|
|
|
this.getVAT();
|
|
|
|
}
|
|
|
|
|
|
|
|
getSubTotal() {
|
2018-07-04 12:41:01 +00:00
|
|
|
let sales = this.sales;
|
2018-06-19 10:10:38 +00:00
|
|
|
|
|
|
|
this.subTotal = 0.00;
|
|
|
|
sales.forEach(sale => {
|
2018-06-28 13:17:50 +00:00
|
|
|
this.subTotal += (sale.quantity * sale.price) - ((sale.discount * (sale.quantity * sale.price)) / 100);
|
2018-06-19 10:10:38 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
getVAT() {
|
|
|
|
this.$http.get(`/ticket/api/Tickets/${this.ticket.id}/getVAT`).then(res => {
|
|
|
|
if (res.data) {
|
|
|
|
this.VAT = res.data;
|
|
|
|
this.total = this.subTotal + this.VAT;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2018-06-06 14:54:40 +00:00
|
|
|
get isEditable() {
|
|
|
|
try {
|
|
|
|
return !this.ticket.tracking.state.alertLevel;
|
|
|
|
} catch (e) {}
|
|
|
|
|
|
|
|
return true;
|
2018-05-08 07:25:15 +00:00
|
|
|
}
|
|
|
|
|
2018-05-08 07:54:14 +00:00
|
|
|
get isChecked() {
|
2018-07-04 12:41:01 +00:00
|
|
|
let data = this.sales;
|
2018-05-08 07:54:14 +00:00
|
|
|
if (data)
|
|
|
|
for (let instance of data)
|
|
|
|
if (instance.checked)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2018-06-06 14:54:40 +00:00
|
|
|
getCheckedLines() {
|
|
|
|
let lines = [];
|
2018-07-04 12:41:01 +00:00
|
|
|
let data = this.sales;
|
2018-06-06 14:54:40 +00:00
|
|
|
if (data)
|
|
|
|
for (let i = 0; i < data.length; i++)
|
|
|
|
if (data[i].checked)
|
|
|
|
lines.push({id: data[i].id, instance: i});
|
2018-07-02 12:14:16 +00:00
|
|
|
|
2018-06-06 14:54:40 +00:00
|
|
|
return lines;
|
|
|
|
}
|
|
|
|
|
|
|
|
onMoreChange(callback) {
|
|
|
|
callback.call(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Change State
|
2018-05-08 07:25:15 +00:00
|
|
|
onStateOkClick() {
|
|
|
|
let filter = {where: {code: "OK"}, fields: ["id"]};
|
|
|
|
let json = encodeURIComponent(JSON.stringify(filter));
|
|
|
|
this.$http.get(`/ticket/api/States?filter=${json}`).then(res => {
|
|
|
|
this.onStateChange(res.data[0].id);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
onStateChange(value) {
|
|
|
|
let params = {ticketFk: this.$state.params.id, stateFk: value};
|
2018-06-06 14:54:40 +00:00
|
|
|
this.$http.post(`/ticket/api/TicketTrackings/changeState`, params).then(() => {
|
2018-05-08 07:25:15 +00:00
|
|
|
this.card.reload();
|
2018-06-28 13:17:50 +00:00
|
|
|
this.vnApp.showSuccess(this.translate.instant('Data saved!'));
|
2018-06-06 14:54:40 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
// Add Turn
|
|
|
|
showAddTurnDialog() {
|
|
|
|
this.$.addTurn.show();
|
|
|
|
}
|
|
|
|
|
|
|
|
addTurn(day) {
|
|
|
|
let params = {ticketFk: this.$state.params.id, weekDay: day};
|
|
|
|
this.$http.patch(`/ticket/api/TicketWeeklies`, params).then(() => {
|
|
|
|
this.$.addTurn.hide();
|
2018-05-08 07:25:15 +00:00
|
|
|
});
|
2018-04-26 14:41:08 +00:00
|
|
|
}
|
2018-03-26 12:55:10 +00:00
|
|
|
|
2018-06-06 14:54:40 +00:00
|
|
|
// Delete Ticket
|
|
|
|
showDeleteTicketDialog() {
|
|
|
|
this.$.deleteConfirmation.show();
|
|
|
|
}
|
|
|
|
|
|
|
|
returnDeleteTicketDialog(response) {
|
|
|
|
if (response === 'ACCEPT')
|
|
|
|
this.deleteTicket();
|
|
|
|
}
|
|
|
|
|
|
|
|
deleteTicket() {
|
|
|
|
let params = {id: this.$state.params.id};
|
|
|
|
this.$http.post(`/ticket/api/Tickets/deleted`, params).then(() => {
|
|
|
|
this.$state.go('ticket.list');
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
// Remove Lines
|
2018-07-02 12:14:16 +00:00
|
|
|
onRemoveLinesClick(response) {
|
|
|
|
if (response === 'ACCEPT') {
|
|
|
|
let sales = this.getCheckedLines();
|
|
|
|
let params = {sales: sales, actualTicketFk: this.ticket.id};
|
|
|
|
let query = `/ticket/api/Sales/removes`;
|
|
|
|
this.$http.post(query, params).then(() => {
|
|
|
|
this.removeInstances(sales);
|
|
|
|
});
|
|
|
|
}
|
2018-06-06 14:54:40 +00:00
|
|
|
}
|
2018-05-08 07:54:14 +00:00
|
|
|
|
2018-07-02 11:18:22 +00:00
|
|
|
removeInstances(instances) {
|
|
|
|
for (let i = instances.length - 1; i >= 0; i--) {
|
2018-07-04 12:41:01 +00:00
|
|
|
this.sales.splice(instances[i].instance, 1);
|
2018-07-02 11:18:22 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-07-02 12:14:16 +00:00
|
|
|
showRemoveLinesDialog() {
|
|
|
|
this.$.deleteLines.show();
|
|
|
|
}
|
|
|
|
|
2018-06-06 14:54:40 +00:00
|
|
|
// Move Lines
|
|
|
|
showTransferPopover(event) {
|
|
|
|
let filter = {clientFk: this.ticket.clientFk, ticketFk: this.ticket.id};
|
|
|
|
let json = encodeURIComponent(JSON.stringify(filter));
|
2018-07-02 11:18:22 +00:00
|
|
|
let query = `/ticket/api/Tickets/threeLastActive?filter=${json}`;
|
|
|
|
this.$http.get(query).then(res => {
|
2018-06-06 14:54:40 +00:00
|
|
|
this.lastThreeTickets = res.data;
|
|
|
|
});
|
|
|
|
this.$.transfer.parent = event.target;
|
|
|
|
this.$.transfer.show();
|
|
|
|
}
|
|
|
|
|
|
|
|
moveLines(ticketID) {
|
|
|
|
let sales = this.getCheckedLines();
|
|
|
|
|
|
|
|
let params = {sales: sales, newTicketFk: ticketID, actualTicketFk: this.ticket.id};
|
|
|
|
this.$http.post(`/ticket/api/Sales/moveToTicket`, params).then(() => {
|
|
|
|
this.goToTicket(ticketID);
|
|
|
|
});
|
2018-05-08 07:54:14 +00:00
|
|
|
}
|
|
|
|
|
2018-06-28 13:17:50 +00:00
|
|
|
// In Progress
|
|
|
|
linesToNewTicket() {
|
|
|
|
let ticket = {
|
|
|
|
oldTicketFk: this.ticket.id,
|
|
|
|
clientFk: this.ticket.clientFk,
|
|
|
|
addressFk: this.ticket.addressFk,
|
|
|
|
agencyModeFk: this.ticket.agencyModeFk,
|
|
|
|
warehouseFk: this.ticket.warehouseFk
|
|
|
|
};
|
|
|
|
|
|
|
|
let sales = this.getCheckedLines();
|
|
|
|
|
|
|
|
this.$http.post(`/api/Sales/MoveToNewTicket`, {ticket: ticket, sales: sales}).then(res => {
|
2018-07-04 12:41:01 +00:00
|
|
|
let url = this.$state.href("ticket.card.sale", {id: res.data.id}, {absolute: true});
|
|
|
|
window.open(url, '_blank');
|
|
|
|
this.$.transfer.hide();
|
|
|
|
this.getSales();
|
2018-06-06 14:54:40 +00:00
|
|
|
});
|
2018-06-28 13:17:50 +00:00
|
|
|
}
|
2018-06-06 14:54:40 +00:00
|
|
|
|
|
|
|
goToTicket(ticketID) {
|
|
|
|
this.$state.go("ticket.card.sale", {id: ticketID});
|
|
|
|
}
|
|
|
|
|
2018-06-28 13:17:50 +00:00
|
|
|
// Slesperson Mana
|
|
|
|
getManaSalespersonMana() {
|
|
|
|
this.$http.get(`/api/Tickets/${this.$state.params.id}/getSalesPersonMana`).then(res => {
|
|
|
|
this.mana = res.data;
|
|
|
|
});
|
|
|
|
}
|
2018-06-06 14:54:40 +00:00
|
|
|
// Item Descriptor
|
2018-04-26 14:41:08 +00:00
|
|
|
showDescriptor(event, itemFk) {
|
|
|
|
this.$.descriptor.itemFk = itemFk;
|
|
|
|
this.$.descriptor.parent = event.target;
|
|
|
|
this.$.descriptor.show();
|
|
|
|
}
|
2018-06-06 14:54:40 +00:00
|
|
|
|
2018-04-26 14:41:08 +00:00
|
|
|
onDescriptorLoad() {
|
|
|
|
this.$.popover.relocate();
|
2018-03-26 12:55:10 +00:00
|
|
|
}
|
2018-06-06 14:54:40 +00:00
|
|
|
|
2018-06-28 13:17:50 +00:00
|
|
|
// Edit Line
|
|
|
|
showEditPricePopover(event, sale) {
|
|
|
|
this.sale = sale;
|
|
|
|
this.editedPrice = this.sale.price;
|
|
|
|
this.edit = {
|
|
|
|
ticketFk: this.ticket.id,
|
|
|
|
id: sale.id,
|
|
|
|
quantity: sale.quantity
|
|
|
|
};
|
|
|
|
this.$.editPricePopover.parent = event.target;
|
|
|
|
this.$.editPricePopover.show();
|
2018-06-06 14:54:40 +00:00
|
|
|
}
|
|
|
|
|
2018-06-28 13:17:50 +00:00
|
|
|
updatePrice() {
|
|
|
|
if (this.editedPrice != this.sale.price) {
|
|
|
|
this.$http.post(`/ticket/api/Sales/updatePrice`, {id: this.edit.id, price: this.editedPrice, ticketFk: this.ticket.id}).then(() => {
|
|
|
|
this.sale.price = this.edit.price;
|
2018-07-04 12:41:01 +00:00
|
|
|
this.getSales();
|
2018-06-28 13:17:50 +00:00
|
|
|
});
|
2018-06-06 14:54:40 +00:00
|
|
|
}
|
2018-06-28 13:17:50 +00:00
|
|
|
this.$.editPricePopover.hide();
|
2018-06-06 14:54:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
showEditPopover(event, sale) {
|
|
|
|
this.sale = sale;
|
2018-06-28 13:17:50 +00:00
|
|
|
this.edit = [{
|
|
|
|
ticketFk: this.ticket.id,
|
2018-06-06 14:54:40 +00:00
|
|
|
id: sale.id,
|
|
|
|
quantity: sale.quantity,
|
|
|
|
price: sale.price,
|
|
|
|
discount: sale.discount
|
2018-06-28 13:17:50 +00:00
|
|
|
}];
|
|
|
|
this.$.editPopover.parent = event.target;
|
|
|
|
this.$.editPopover.show();
|
|
|
|
}
|
|
|
|
|
|
|
|
async showEditDialog() {
|
|
|
|
this.edit = this.getCheckedLines();
|
|
|
|
this.$.editDialog.show();
|
|
|
|
}
|
|
|
|
|
|
|
|
hideEditDialog() {
|
2018-07-04 12:41:01 +00:00
|
|
|
this.getSales();
|
2018-06-28 13:17:50 +00:00
|
|
|
this.$.editDialog.hide();
|
|
|
|
}
|
|
|
|
|
|
|
|
hideEditPopover() {
|
2018-07-04 12:41:01 +00:00
|
|
|
this.getSales();
|
2018-06-28 13:17:50 +00:00
|
|
|
this.$.editPopover.hide();
|
|
|
|
}
|
|
|
|
|
|
|
|
updateQuantity(id, quantity) {
|
|
|
|
this.$http.post(`/ticket/api/Sales/${id}/updateQuantity`, {quantity: parseInt(quantity)}).then(() => {
|
|
|
|
this.vnApp.showSuccess(this.translate.instant('Data saved!'));
|
2018-07-04 12:41:01 +00:00
|
|
|
}).catch(e => {
|
|
|
|
this.vnApp.showError(this.translate.instant(e.data.error.message));
|
|
|
|
this.getSales();
|
2018-06-28 13:17:50 +00:00
|
|
|
});
|
2018-06-06 14:54:40 +00:00
|
|
|
}
|
|
|
|
|
2018-06-28 13:17:50 +00:00
|
|
|
/* updateLine() {
|
2018-06-06 14:54:40 +00:00
|
|
|
if (this.edit.quantity != this.sale.quantity) {
|
|
|
|
this.$http.post(`/ticket/api/Sales/updateQuantity`, {id: this.edit.id, quantity: this.edit.quantity}).then(() => {
|
|
|
|
this.sale.quantity = this.edit.quantity;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (this.edit.price != this.sale.price) {
|
|
|
|
this.$http.post(`/ticket/api/Sales/updatePrice`, {id: this.edit.id, price: this.edit.price}).then(() => {
|
|
|
|
this.sale.price = this.edit.price;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (this.edit.discount != this.sale.discount) {
|
|
|
|
this.$http.post(`/ticket/api/Sales/updateDiscount`, {id: this.edit.id, discount: this.edit.discount}).then(() => {
|
|
|
|
this.sale.discount = this.edit.discount;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
this.$.edit.hide();
|
2018-06-28 13:17:50 +00:00
|
|
|
}*/
|
2018-06-19 07:09:49 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Unmark sale as reserved
|
|
|
|
*/
|
|
|
|
unmarkAsReserved() {
|
|
|
|
this.setReserved(false);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2018-07-03 13:00:16 +00:00
|
|
|
* Mark sale as reserved
|
2018-06-19 07:09:49 +00:00
|
|
|
*/
|
2018-07-03 13:00:16 +00:00
|
|
|
markAsReserved() {
|
|
|
|
this.setReserved(true);
|
|
|
|
}
|
2018-06-19 07:09:49 +00:00
|
|
|
|
2018-07-03 13:00:16 +00:00
|
|
|
setReserved(reserved) {
|
|
|
|
let sales = this.getCheckedLines();
|
|
|
|
let params = {sales: sales, ticketFk: this.ticket.id, reserved: reserved};
|
2018-06-19 07:09:49 +00:00
|
|
|
|
2018-07-03 13:00:16 +00:00
|
|
|
this.$http.post(`/ticket/api/Sales/reserve`, params).then(() => {
|
2018-07-04 12:41:01 +00:00
|
|
|
this.getSales();
|
2018-06-19 07:09:49 +00:00
|
|
|
});
|
|
|
|
}
|
2018-03-26 12:55:10 +00:00
|
|
|
}
|
|
|
|
|
2018-06-28 13:17:50 +00:00
|
|
|
Controller.$inject = ['$scope', '$timeout', '$state', '$http', 'vnApp', '$translate'];
|
2018-03-26 12:55:10 +00:00
|
|
|
|
2018-03-22 17:02:48 +00:00
|
|
|
ngModule.component('vnTicketSale', {
|
2018-05-25 08:03:45 +00:00
|
|
|
template: require('./index.html'),
|
2018-05-08 07:25:15 +00:00
|
|
|
controller: Controller,
|
|
|
|
bindings: {
|
|
|
|
ticket: '<'
|
|
|
|
},
|
|
|
|
require: {
|
|
|
|
card: '^vnTicketCard'
|
|
|
|
}
|
2018-03-22 17:02:48 +00:00
|
|
|
});
|