diff --git a/client/ticket/src/sale/index.html b/client/ticket/src/sale/index.html
index b3c756766f..62e753ae1f 100644
--- a/client/ticket/src/sale/index.html
+++ b/client/ticket/src/sale/index.html
@@ -47,7 +47,7 @@
-
+
@@ -64,7 +64,7 @@
-
+
diff --git a/client/ticket/src/sale/index.js b/client/ticket/src/sale/index.js
index e5f602a964..74b1d2f7c1 100644
--- a/client/ticket/src/sale/index.js
+++ b/client/ticket/src/sale/index.js
@@ -16,7 +16,8 @@ class Controller {
{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'}
+ {callback: this.showEditDialog, name: 'Update discount'},
+ {callback: this.createClaim, name: 'Add claim'}
];
}
@@ -78,7 +79,6 @@ class Controller {
for (let i = 0; i < data.length; i++)
if (data[i].checked)
lines.push({id: data[i].id, instance: i});
-
return lines;
}
@@ -177,7 +177,6 @@ class Controller {
});
}
- // In Progress
linesToNewTicket() {
let ticket = {
oldTicketFk: this.ticket.id,
@@ -197,6 +196,22 @@ class Controller {
});
}
+ createClaim() {
+ let claim = {
+ ticketFk: this.ticket.id,
+ clientFk: this.ticket.clientFk,
+ ticketCreated: this.ticket.shipped,
+ workerFk: this.ticket.client.salesPersonFk
+ };
+ let sales = this.getCheckedLines();
+ for (let i = 0; i < sales.length; i++)
+ sales[i].quantity = this.sales[sales[i].instance].quantity;
+ this.$http.post(`claim/api/Claims/createFromSales`, {claim: claim, sales: sales}).then(res => {
+ let url = this.$state.href("claim.card.basicData", {id: res.data.id}, {absolute: true});
+ window.open(url, '_blank');
+ });
+ }
+
goToTicket(ticketID) {
this.$state.go("ticket.card.sale", {id: ticketID});
}
diff --git a/client/ticket/src/sale/index.spec.js b/client/ticket/src/sale/index.spec.js
index 9a50568911..a8f140506a 100644
--- a/client/ticket/src/sale/index.spec.js
+++ b/client/ticket/src/sale/index.spec.js
@@ -33,14 +33,28 @@ describe('Ticket', () => {
quantity: 20,
price: 5.5,
discount: 0,
- checked: true
+ checked: false
}
]};
$scope.addTurn = {show: () => {}};
controller = $componentController('vnTicketSale', {$scope: $scope}, {$state: $state});
- controller.ticket = {id: 1};
+ controller.ticket = {id: 1, clientFk: 1, shipped: 1, client: {salesPersonFk: 1}};
+ spyOn(window, 'open');
}));
+ describe('createClaim()', () => {
+ it('should perfrom a query and call windows open', () => {
+ controller.sales = controller.$scope.model.data;
+ let res = {id: 1};
+ $httpBackend.expectPOST(`claim/api/Claims/createFromSales`).respond(res);
+ controller.createClaim();
+ $httpBackend.flush();
+ let urlMock = null;
+
+ expect(window.open).toHaveBeenCalledWith(urlMock, '_blank');
+ });
+ });
+
describe('getSales()', () => {
it('should make a query and call getTaxes()', () => {
let data = [
@@ -56,7 +70,7 @@ describe('Ticket', () => {
quantity: 20,
price: 5.5,
discount: 0,
- checked: true
+ checked: false
}
];
@@ -113,9 +127,10 @@ describe('Ticket', () => {
describe('getCheckedLines()', () => {
it('should make an array of the instances with the property checked true()', () => {
- controller.sales = [{id: 1, checked: true}, {id: 2, checked: false}, {id: 3, checked: true}];
+ let expectedResult = [{id: 1, instance: 0}];
+ controller.sales = controller.$scope.model.data;
- expect(controller.getCheckedLines()).toEqual([{id: 1, instance: 0}, {id: 3, instance: 2}]);
+ expect(controller.getCheckedLines()).toEqual(expectedResult);
});
});
diff --git a/client/ticket/src/sale/locale/es.yml b/client/ticket/src/sale/locale/es.yml
index bbaf8d0319..f52716b8c8 100644
--- a/client/ticket/src/sale/locale/es.yml
+++ b/client/ticket/src/sale/locale/es.yml
@@ -22,4 +22,5 @@ Wednesday: Miércoles
Thursday: Jueves
Friday: Viernes
Saturday: Sábado
-Sunday: Domingo
\ No newline at end of file
+Sunday: Domingo
+Add claim: Crear reclamación
\ No newline at end of file
diff --git a/services/claim/common/methods/claim/createFromSales.js b/services/claim/common/methods/claim/createFromSales.js
new file mode 100644
index 0000000000..97d4edea71
--- /dev/null
+++ b/services/claim/common/methods/claim/createFromSales.js
@@ -0,0 +1,50 @@
+module.exports = Self => {
+ Self.remoteMethod('createFromSales', {
+ description: 'Create a claim',
+ accessType: '',
+ accepts: [{
+ arg: 'claim',
+ type: 'object',
+ required: true,
+ description: ' newTicketFk, clientFk, ticketCreated',
+ http: {source: 'body'}
+ }, {
+ arg: 'sales',
+ type: 'object',
+ required: true,
+ description: '[sales IDs]',
+ http: {source: 'body'}
+ }],
+ returns: {
+ type: 'object',
+ root: true
+ },
+ http: {
+ path: `/createFromSales`,
+ verb: 'post'
+ }
+ });
+
+ Self.createFromSales = async params => {
+ let model = Self.app.models;
+ let transaction = await Self.beginTransaction({});
+ try {
+ let newClaim = await Self.create(params.claim, {transaction});
+ let promises = [];
+ for (let i = 0; i < params.sales.length; i++) {
+ promises.push(model.ClaimBeginning.create(
+ {saleFk: params.sales[i].id,
+ claimFk: newClaim.id,
+ quantity: params.sales[i].quantity},
+ {transaction}));
+ }
+ await Promise.all(promises);
+ await transaction.commit();
+
+ return newClaim;
+ } catch (e) {
+ transaction.rollback();
+ throw e;
+ }
+ };
+};
diff --git a/services/claim/common/methods/claim/specs/createFromSales.spec.js b/services/claim/common/methods/claim/specs/createFromSales.spec.js
new file mode 100644
index 0000000000..7c364c619d
--- /dev/null
+++ b/services/claim/common/methods/claim/specs/createFromSales.spec.js
@@ -0,0 +1,54 @@
+const app = require(`${servicesDir}/claim/server/server`);
+
+fdescribe('Claim Create', () => {
+ let newDate = new Date();
+ let createdClaimFk;
+
+ afterAll(async() => {
+ console.log('asdf', createdClaimFk);
+ await app.models.Claim.destroyById(createdClaimFk);
+ });
+
+ let newClaim = {
+ ticketFk: 2,
+ clientFk: 101,
+ ticketCreated: newDate,
+ workerFk: 18
+ };
+
+ let newSale = [{
+ id: 2,
+ instance: 0,
+ quantity: 10
+ }];
+
+ let params = {claim: newClaim, sales: newSale};
+
+ it('should create a new claim', async() => {
+ let claim = await app.models.Claim.createFromSales(params);
+
+ expect(claim.ticketFk).toEqual(newClaim.ticketFk);
+ expect(claim.clientFk).toEqual(newClaim.clientFk);
+ expect(claim.ticketCreated).toEqual(newClaim.ticketCreated);
+ expect(claim.workerFk).toEqual(newClaim.workerFk);
+
+ let claimBeginning = await app.models.ClaimBeginning.findOne({where: {claimFk: claim.id}});
+
+ expect(claimBeginning.saleFk).toEqual(newSale[0].id);
+ expect(claimBeginning.quantity).toEqual(newSale[0].quantity);
+
+ createdClaimFk = claim.id;
+ });
+
+ it('should not be able to create a claim if exists that sale', async() => {
+ let error;
+
+ await app.models.Claim.createFromSales(params)
+
+ .catch(e => {
+ error = e;
+ });
+
+ expect(error.toString()).toContain(`A claim with that sale already exists`);
+ });
+});
diff --git a/services/claim/common/models/claim.js b/services/claim/common/models/claim.js
index dd01547ea8..73a6da1d71 100644
--- a/services/claim/common/models/claim.js
+++ b/services/claim/common/models/claim.js
@@ -1,3 +1,4 @@
module.exports = Self => {
require('../methods/claim/getSummary')(Self);
+ require('../methods/claim/createFromSales')(Self);
};
diff --git a/services/claim/common/models/claim.json b/services/claim/common/models/claim.json
index 7ca5d15b28..3380e6ec49 100644
--- a/services/claim/common/models/claim.json
+++ b/services/claim/common/models/claim.json
@@ -21,16 +21,13 @@
"required": true
},
"isChargedToMana": {
- "type": "boolean",
- "required": true
+ "type": "boolean"
},
"created": {
- "type": "date",
- "required": true
+ "type": "date"
},
"responsibility": {
- "type": "Number",
- "required": true
+ "type": "Number"
}
},
"relations": {
diff --git a/services/loopback/common/locale/es.json b/services/loopback/common/locale/es.json
index 57ddd4465c..f13c016c2f 100644
--- a/services/loopback/common/locale/es.json
+++ b/services/loopback/common/locale/es.json
@@ -46,5 +46,6 @@
"Barcode must be unique": "El código de barras debe ser único",
"The warehouse can't be repeated": "El almacén no puede repetirse",
"The tag can't be repeated": "El tag no puede repetirse",
- "The observation type can't be repeated": "El tipo de observación no puede repetirse"
+ "The observation type can't be repeated": "El tipo de observación no puede repetirse",
+ "A claim with that sale already exists": "Ya existe una reclamación para esta línea"
}
\ No newline at end of file