diff --git a/client/item/src/ticket-descriptor/index.html b/client/item/src/ticket-descriptor/index.html index c6f02eb5a1..8e153054de 100644 --- a/client/item/src/ticket-descriptor/index.html +++ b/client/item/src/ticket-descriptor/index.html @@ -3,10 +3,19 @@ - + +
{{::$ctrl.client.name}}
@@ -84,3 +93,49 @@ + + +
+
+ In which day you want to add the ticket? +
+ + + + + + + + + + + + + + + + +
+
+
+ + \ No newline at end of file diff --git a/client/item/src/ticket-descriptor/index.js b/client/item/src/ticket-descriptor/index.js index aa9c99682c..323f773813 100644 --- a/client/item/src/ticket-descriptor/index.js +++ b/client/item/src/ticket-descriptor/index.js @@ -1,11 +1,64 @@ import ngModule from '../module'; class Controller { - constructor($state, $scope) { + constructor($state, $scope, $http, vnApp, $translate) { this.$scope = $scope; this.$state = $state; + this.$http = $http; + this.vnApp = vnApp; + this.$translate = $translate; + this.moreOptions = [ + {callback: this.showAddTurnDialog, name: 'Add turn'}, + {callback: this.showDeleteTicketDialog, name: 'Delete ticket'} + ]; } + onMoreChange(callback) { + callback.call(this); + } + + get isEditable() { + try { + return !this.ticket.tracking.state.alertLevel; + } catch (e) {} + + return true; + } + + // Add Turn + showAddTurnDialog() { + this.$scope.addTurn.show(); + } + + addTurn(day) { + let params = {ticketFk: this.ticket.id, weekDay: day}; + this.$http.patch(`/ticket/api/TicketWeeklies`, params).then(() => { + this.$scope.addTurn.hide(); + this.vnApp.showSuccess(this.$translate.instant('Data saved!')); + }); + } + + // Delete Ticket + showDeleteTicketDialog() { + if (!this.isEditable) { + this.vnApp.showError(this.$translate.instant('This ticket cant be deleted')); + return; + } + + this.$scope.deleteConfirmation.show(); + } + + deleteTicket(response) { + if (response === 'ACCEPT') { + let params = {id: this.ticket.id}; + this.$http.post(`/ticket/api/Tickets/deleted`, params).then(() => { + this.$state.go('ticket.index'); + this.vnApp.showSuccess(this.$translate.instant('Ticket deleted')); + }); + } + } + + get ticket() { return this._ticket; } @@ -33,7 +86,7 @@ class Controller { } } -Controller.$inject = ['$state', '$scope']; +Controller.$inject = ['$state', '$scope', '$http', 'vnApp', '$translate']; ngModule.component('vnTicketDescriptor', { template: require('./index.html'), diff --git a/client/item/src/ticket-descriptor/index.spec.js b/client/item/src/ticket-descriptor/index.spec.js new file mode 100644 index 0000000000..3a5e74d930 --- /dev/null +++ b/client/item/src/ticket-descriptor/index.spec.js @@ -0,0 +1,76 @@ +import './index.js'; + +describe('Item Component vnTicketDescriptor', () => { + let $componentController; + let $httpBackend; + let controller; + + beforeEach(() => { + angular.mock.module('item'); + }); + + beforeEach(angular.mock.inject((_$componentController_, _$httpBackend_) => { + $componentController = _$componentController_; + $httpBackend = _$httpBackend_; + $httpBackend.when('GET', /\/locale\/\w+\/[a-z]{2}\.json/).respond({}); + controller = $componentController('vnTicketDescriptor'); + controller.ticket = {id: 2}; + })); + + describe('showAddTurnDialog()', () => { + it('should call contrtoller.$scope.addTurn.show()', () => { + controller.$scope.addTurn = {show: () => {}}; + spyOn(controller.$scope.addTurn, 'show'); + controller.showAddTurnDialog(); + + expect(controller.$scope.addTurn.show).toHaveBeenCalledWith(); + }); + }); + + describe('addTurn(day)', () => { + it('should make a query and call $.addTurn.hide() and vnApp.showSuccess()', () => { + controller.$scope.addTurn = {hide: () => {}}; + spyOn(controller.$scope.addTurn, 'hide'); + + $httpBackend.expectPATCH(`/ticket/api/TicketWeeklies`).respond(); + controller.addTurn(1); + $httpBackend.flush(); + + expect(controller.$scope.addTurn.hide).toHaveBeenCalledWith(); + }); + }); + + describe('showDeleteTicketDialog()', () => { + it('should call vnApp.showError() if the ticket isnt editable', () => { + controller.ticket.tracking = {state: {alertLevel: 3}}; + spyOn(controller.vnApp, 'showError'); + controller.showDeleteTicketDialog(); + + expect(controller.vnApp.showError).toHaveBeenCalledWith('This ticket cant be deleted'); + }); + + it('should call deleteConfirmation.show() if the ticket is editable', () => { + controller.ticket.tracking = {state: {alertLevel: 0}}; + controller.$scope.deleteConfirmation = {show: () => {}}; + spyOn(controller.$scope.deleteConfirmation, 'show'); + controller.showDeleteTicketDialog(); + + expect(controller.$scope.deleteConfirmation.show).toHaveBeenCalledWith(); + }); + }); + + describe('deleteTicket(response)', () => { + it('should make a query and call vnApp.showSuccess() if the response is ACCEPT', () => { + spyOn(controller.$state, 'go'); + spyOn(controller.vnApp, 'showSuccess'); + + $httpBackend.expectPOST(`/ticket/api/Tickets/deleted`, {id: 2}).respond(); + controller.deleteTicket('ACCEPT'); + $httpBackend.flush(); + + expect(controller.$state.go).toHaveBeenCalledWith('ticket.index'); + expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Ticket deleted'); + }); + }); +}); + diff --git a/client/salix/src/styles/misc.scss b/client/salix/src/styles/misc.scss index 7e3619cf1e..0e9647433a 100644 --- a/client/salix/src/styles/misc.scss +++ b/client/salix/src/styles/misc.scss @@ -186,7 +186,7 @@ vn-main-block { padding: .1em; font-size: 2.5em; } - & > a { + & > a , & > vn-icon-menu { @extend %clickable; display: flex; align-items: center; @@ -197,6 +197,10 @@ vn-main-block { & > vn-icon { font-size: 1.8em; } + + & vn-drop-down{ + color: initial; + } } } .footer { diff --git a/client/ticket/src/sale/index.html b/client/ticket/src/sale/index.html index 2bf6cee3d9..efb27cb651 100644 --- a/client/ticket/src/sale/index.html +++ b/client/ticket/src/sale/index.html @@ -14,13 +14,14 @@ ng-click="$ctrl.onStateOkClick()" vn-tooltip="Change ticket state to 'Ok'"> - - - + - + - - - -
-
- In which day you want to add the ticket? -
- - - - - - - - - - - - - - - - -
-
-
- - - { - this.$scope.addTurn.hide(); - this.vnApp.showSuccess(this.$translate.instant('Data saved!')); - }); - } - - // Delete Ticket - showDeleteTicketDialog() { - if (!this.isEditable) - return; - this.$scope.deleteConfirmation.show(); - } - - deleteTicket(response) { - if (response === 'ACCEPT') { - let params = {id: this.$state.params.id}; - this.$http.post(`/ticket/api/Tickets/deleted`, params).then(() => { - this.$state.go('ticket.index'); - this.vnApp.showSuccess(this.$translate.instant('Ticket deleted')); - }); - } - } - // Remove Lines onRemoveLinesClick(response) { if (response === 'ACCEPT') { diff --git a/client/ticket/src/sale/index.spec.js b/client/ticket/src/sale/index.spec.js index 92753ef0f3..ceaddab904 100644 --- a/client/ticket/src/sale/index.spec.js +++ b/client/ticket/src/sale/index.spec.js @@ -108,28 +108,6 @@ describe('Ticket', () => { }); }); - describe('showAddTurnDialog()', () => { - it('should call contrtoller.$scope.addTurn.show()', () => { - controller.$scope.addTurn = {show: () => {}}; - spyOn(controller.$scope.addTurn, 'show'); - controller.showAddTurnDialog(); - - expect(controller.$scope.addTurn.show).toHaveBeenCalledWith(); - }); - }); - - describe('addTurn(day)', () => { - it('should make a query and call $.addTurn.hide() and vnApp.showSuccess()', () => { - spyOn(controller.$scope.addTurn, 'hide'); - - $httpBackend.expectPATCH(`/ticket/api/TicketWeeklies`).respond(); - controller.addTurn(1); - $httpBackend.flush(); - - expect(controller.$scope.addTurn.hide).toHaveBeenCalledWith(); - }); - }); - describe('onStateChange()', () => { it('should perform a post and then call a function', () => { $httpBackend.expectPOST(`/ticket/api/TicketTrackings/changeState`).respond(); diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 0503587499..90d8854e7c 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -358,13 +358,12 @@ export default { moveToNewTicketButton: 'vn-ticket-sale vn-popover.transfer vn-button[label="New ticket"]', acceptDeleteLineButton: `vn-ticket-sale > vn-confirm[vn-id="delete-lines"] button[response=ACCEPT]`, acceptDeleteTicketButton: `vn-ticket-sale > vn-confirm[vn-id="deleteConfirmation"] button[response=ACCEPT]`, - stateMenuButton: 'vn-ticket-sale vn-tool-bar > vn-icon-menu[label="State"] button', + stateMenuButton: 'vn-ticket-sale vn-tool-bar > vn-button-menu[label="State"] button', stateMenuOptions: 'vn-ticket-sale vn-drop-down > vn-popover ul > li:nth-child(1)', - moreMenuButton: 'vn-ticket-sale vn-tool-bar > vn-icon-menu[label="More"] button', - moreMenuDeleteOption: 'vn-ticket-sale vn-drop-down > vn-popover ul > li:nth-child(2)', - moreMenuReseveOption: 'vn-ticket-sale vn-drop-down > vn-popover ul > li:nth-child(4)', - moreMenuUnmarkResevedOption: 'vn-ticket-sale vn-drop-down > vn-popover ul > li:nth-child(5)', - moreMenuUpdateDiscount: 'vn-ticket-sale vn-drop-down > vn-popover ul > li:nth-child(6)', + moreMenuButton: 'vn-ticket-sale vn-tool-bar > vn-button-menu[label="More"] button', + moreMenuReseveOption: 'vn-ticket-sale vn-drop-down > vn-popover ul > li:nth-child(2)', + moreMenuUnmarkResevedOption: 'vn-ticket-sale vn-drop-down > vn-popover ul > li:nth-child(3)', + moreMenuUpdateDiscount: 'vn-ticket-sale vn-drop-down > vn-popover ul > li:nth-child(4)', moreMenuUpdateDiscountInput: 'vn-ticket-sale vn-dialog.shown vn-ticket-sale-edit-discount input', moreMenuCreateClaim: 'vn-ticket-sale vn-drop-down > vn-popover ul > li:nth-child(1)' }, diff --git a/e2e/paths/ticket-module/07_edit_sale.spec.js b/e2e/paths/ticket-module/07_edit_sale.spec.js index 20a355f453..997e34b842 100644 --- a/e2e/paths/ticket-module/07_edit_sale.spec.js +++ b/e2e/paths/ticket-module/07_edit_sale.spec.js @@ -668,35 +668,36 @@ describe('Ticket Edit sale path', () => { expect(url).toContain('/sale'); }); - - it(`should be able to delete the ticket`, async () => { - const url = await nightmare - .waitToClick(selectors.ticketSales.moreMenuButton) - .waitToClick(selectors.ticketSales.moreMenuDeleteOption) - .waitToClick(selectors.ticketSales.acceptDeleteTicketButton) - .waitForURL('/ticket/index') - .url(); - - expect(url).toContain('/ticket/index'); - }); - - it(`should search for the deleted ticket`, async () => { - const result = await nightmare - .wait(selectors.ticketsIndex.searchResult) - .type(selectors.ticketsIndex.searchTicketInput, 'id:17') - .click(selectors.ticketsIndex.searchButton) - .waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1) - .countElement(selectors.ticketsIndex.searchResult); - - expect(result).toEqual(1); - }); - - it(`should search for the deleted ticket`, async () => { - const result = await nightmare - .wait(selectors.ticketsIndex.searchResultDate) - .getInnerText(selectors.ticketsIndex.searchResultDate); - - expect(result).toContain(2000); - }); }); }); + +// TAREA #802 e2e ticket.descriptor +/* it(`should be able to delete the ticket`, async () => { + const url = await nightmare + .waitToClick(selectors.ticketSales.moreMenuButton) + .waitToClick(selectors.ticketSales.moreMenuDeleteOption) + .waitToClick(selectors.ticketSales.acceptDeleteTicketButton) + .waitForURL('/ticket/index') + .url(); + + expect(url).toContain('/ticket/index'); +}); + +it(`should search for the deleted ticket`, async () => { + const result = await nightmare + .wait(selectors.ticketsIndex.searchResult) + .type(selectors.ticketsIndex.searchTicketInput, 'id:17') + .click(selectors.ticketsIndex.searchButton) + .waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1) + .countElement(selectors.ticketsIndex.searchResult); + + expect(result).toEqual(1); +}); + +it(`should search for the deleted ticket`, async () => { + const result = await nightmare + .wait(selectors.ticketsIndex.searchResultDate) + .getInnerText(selectors.ticketsIndex.searchResultDate); + + expect(result).toContain(2000); +}); */