import ngModule from '../module'; import './style.scss'; class Controller { constructor($state, $, $http, $translate, vnApp, aclService) { this.$state = $state; this.$ = $; this.$http = $http; this.$translate = $translate; this.vnApp = vnApp; this.aclService = aclService; this.edit = {}; this.filter = { where: {claimFk: $state.params.id}, include: [ { relation: 'sale', scope: { fields: ['concept', 'ticketFk', 'price', 'quantity', 'discount', 'itemFk'], include: { relation: 'ticket' } } } ] }; } set salesClaimed(value) { this._salesClaimed = value; if (value) this.calculateTotals(); } get salesClaimed() { return this._salesClaimed; } get newDiscount() { return this._newDiscount; } set newDiscount(value) { this._newDiscount = value; this.updateNewPrice(); } openAddSalesDialog() { this.getClaimableFromTicket(); this.$.addSales.show(); } getClaimableFromTicket() { let config = {params: {ticketFk: this.claim.ticketFk}}; let query = `Sales/getClaimableFromTicket`; this.$http.get(query, config).then(res => { if (res.data) this.salesToClaim = res.data; }); } addClaimedSale(index) { let sale = this.salesToClaim[index]; let saleToAdd = {saleFk: sale.saleFk, claimFk: this.claim.id, quantity: sale.quantity}; let query = `ClaimBeginnings/`; this.$http.post(query, saleToAdd).then(() => { this.$.addSales.hide(); this.$.model.refresh(); this.vnApp.showSuccess(this.$translate.instant('Data saved!')); if (this.aclService.hasAny(['salesAssistant'])) this.$state.go('claim.card.development'); }); } deleteClaimedSale(index) { let sale = this.salesClaimed[index]; let query = `ClaimBeginnings/${sale.id}`; this.$http.delete(query).then(() => { this.vnApp.showSuccess(this.$translate.instant('Data saved!')); this.$.model.remove(index); this.calculateTotals(); }); } setClaimedQuantity(id, claimedQuantity) { let params = {id: id, quantity: claimedQuantity}; let query = `ClaimBeginnings/`; this.$http.patch(query, params).then(() => { this.vnApp.showSuccess(this.$translate.instant('Data saved!')); this.calculateTotals(); }); } calculateTotals() { this.paidTotal = 0.0; this.claimedTotal = 0.0; if (!this._salesClaimed) return; this._salesClaimed.forEach(sale => { let orgSale = sale.sale; this.paidTotal += this.getSaleTotal(orgSale); this.claimedTotal += sale.quantity * orgSale.price - ((orgSale.discount * (sale.quantity * orgSale.price)) / 100); }); } getSaleTotal(sale) { let total = 0.0; total += sale.quantity * sale.price - ((sale.discount * (sale.quantity * sale.price)) / 100); return total; } showItemDescriptor(event, itemFk) { event.stopImmediatePropagation(); this.$.descriptor.itemFk = itemFk; this.$.descriptor.parent = event.target; this.$.descriptor.show(); } showEditPopover(event, saleClaimed) { this.saleClaimed = saleClaimed; if (!this.aclService.hasAny(['salesAssistant'])) return this.vnApp.showError(this.$translate.instant('Insuficient permisos')); this.$.editPopover.parent = event.target; this.$.editPopover.show(); } getSalespersonMana() { this.$http.get(`Tickets/${this.claim.ticketFk}/getSalesPersonMana`).then(res => { this.mana = res.data; }); } updateDiscount() { const claimedSale = this.saleClaimed.sale; if (this.newDiscount != claimedSale.discount) { const params = {salesIds: [claimedSale.id], newDiscount: this.newDiscount}; const query = `Tickets/${claimedSale.ticketFk}/updateDiscount`; this.$http.post(query, params).then(() => { claimedSale.discount = this.newDiscount; this.calculateTotals(); this.clearDiscount(); this.vnApp.showSuccess(this.$translate.instant('Data saved!')); }).catch(err => { this.vnApp.showError(err.message); }); } this.$.editPopover.hide(); } updateNewPrice() { this.newPrice = (this.saleClaimed.quantity * this.saleClaimed.sale.price) - ((this.newDiscount * (this.saleClaimed.quantity * this.saleClaimed.sale.price)) / 100); } clearDiscount() { this.newDiscount = null; } } Controller.$inject = ['$state', '$scope', '$http', '$translate', 'vnApp', 'aclService']; ngModule.component('vnClaimDetail', { template: require('./index.html'), controller: Controller, bindings: { claim: '<' } });