2980 - Invoice in fixes #668
|
@ -0,0 +1,103 @@
|
||||||
|
DROP PROCEDURE IF EXISTS `vn`.`ticket_componentMakeUpdate`;
|
||||||
|
|
||||||
|
DELIMITER $$
|
||||||
|
$$
|
||||||
|
|
||||||
|
CREATE
|
||||||
|
DEFINER = root@`%` PROCEDURE `vn`.`ticket_componentMakeUpdate`(IN vTicketFk INT, IN vClientFk INT,
|
||||||
|
IN vNickname VARCHAR(50), IN vAgencyModeFk INT,
|
||||||
|
IN vAddressFk INT, IN vZoneFk INT, IN vWarehouseFk TINYINT,
|
||||||
|
IN vCompanyFk SMALLINT, IN vShipped DATETIME,
|
||||||
|
IN vLanded DATE, IN vIsDeleted TINYINT(1),
|
||||||
|
IN vHasToBeUnrouted TINYINT(1), IN vOption INT)
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Modifica en el ticket los campos que se le pasan por parámetro
|
||||||
|
* y cambia sus componentes
|
||||||
|
*
|
||||||
|
* @param vTicketFk Id del ticket a modificar
|
||||||
|
* @param vClientFk nuevo cliente
|
||||||
|
* @param vNickname nuevo alias
|
||||||
|
* @param vAgencyModeFk nueva agencia
|
||||||
|
* @param vAddressFk nuevo consignatario
|
||||||
|
* @param vZoneFk nueva zona
|
||||||
|
* @param vWarehouseFk nuevo almacen
|
||||||
|
* @param vCompanyFk nueva empresa
|
||||||
|
* @param vShipped nueva fecha del envio de mercancia
|
||||||
|
* @param vLanded nueva fecha de recepcion de mercancia
|
||||||
|
* @param vIsDeleted si se borra el ticket
|
||||||
|
* @param vHasToBeUnrouted si se le elimina la ruta al ticket
|
||||||
|
* @param vOption opcion para el case del proc ticketComponentUpdateSale
|
||||||
|
*/
|
||||||
|
DECLARE vPrice DECIMAL(10,2);
|
||||||
|
DECLARE vBonus DECIMAL(10,2);
|
||||||
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||||
|
BEGIN
|
||||||
|
ROLLBACK;
|
||||||
|
RESIGNAL;
|
||||||
|
END;
|
||||||
|
|
||||||
|
CALL ticket_componentPreview (vTicketFk, vLanded, vAddressFk, vZoneFk, vWarehouseFk);
|
||||||
|
|
||||||
|
START TRANSACTION;
|
||||||
|
|
||||||
|
IF (SELECT addressFk FROM ticket WHERE id = vTicketFk) <> vAddressFk THEN
|
||||||
|
|
||||||
|
UPDATE ticket t
|
||||||
|
JOIN address a ON a.id = vAddressFk
|
||||||
|
SET t.nickname = a.nickname
|
||||||
|
WHERE t.id = vTicketFk;
|
||||||
|
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
CALL zone_getShippedWarehouse(vlanded, vAddressFk, vAgencyModeFk);
|
||||||
|
|
||||||
|
SELECT zoneFk, price, bonus INTO vZoneFk, vPrice, vBonus
|
||||||
|
FROM tmp.zoneGetShipped
|
||||||
|
WHERE shipped BETWEEN DATE(vShipped) AND util.dayEnd(vShipped) AND warehouseFk = vWarehouseFk LIMIT 1;
|
||||||
|
|
||||||
|
UPDATE ticket t
|
||||||
|
SET
|
||||||
|
t.clientFk = vClientFk,
|
||||||
|
t.nickname = vNickname,
|
||||||
|
t.agencyModeFk = vAgencyModeFk,
|
||||||
|
t.addressFk = vAddressFk,
|
||||||
|
t.zoneFk = vZoneFk,
|
||||||
|
t.zonePrice = vPrice,
|
||||||
|
t.zoneBonus = vBonus,
|
||||||
|
t.warehouseFk = vWarehouseFk,
|
||||||
|
t.companyFk = vCompanyFk,
|
||||||
|
t.landed = vLanded,
|
||||||
|
t.shipped = vShipped,
|
||||||
|
t.isDeleted = vIsDeleted
|
||||||
|
WHERE
|
||||||
|
t.id = vTicketFk;
|
||||||
|
|
||||||
|
IF vHasToBeUnrouted THEN
|
||||||
|
UPDATE ticket t SET t.routeFk = NULL
|
||||||
|
WHERE t.id = vTicketFk;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF vOption <> 8 THEN
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.sale;
|
||||||
|
CREATE TEMPORARY TABLE tmp.sale
|
||||||
|
(PRIMARY KEY (saleFk))
|
||||||
|
ENGINE = MEMORY
|
||||||
|
SELECT id AS saleFk, vWarehouseFk warehouseFk
|
||||||
|
FROM sale s WHERE s.ticketFk = vTicketFk;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponent;
|
||||||
|
CREATE TEMPORARY TABLE tmp.ticketComponent
|
||||||
|
SELECT * FROM tmp.ticketComponentPreview;
|
||||||
|
|
||||||
|
CALL ticketComponentUpdateSale (vOption);
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE tmp.sale;
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponent;
|
||||||
|
END IF;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE tmp.zoneGetShipped, tmp.ticketComponentPreview;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
<vn-crud-model
|
<vn-crud-model
|
||||||
vn-id="ticketsModel"
|
vn-id="ticketsModel"
|
||||||
auto-load="true"
|
auto-load="true"
|
||||||
url="Tickets/filter"
|
url="Tickets"
|
||||||
link="{'t.clientFk': $ctrl.$params.id}"
|
link="{clientFk: $ctrl.$params.id}"
|
||||||
|
filter="::$ctrl.ticketFilter"
|
||||||
limit="5"
|
limit="5"
|
||||||
data="tickets"
|
data="tickets"
|
||||||
order="shippedDate DESC, shippedHour ASC">
|
order="shipped DESC">
|
||||||
</vn-crud-model>
|
</vn-crud-model>
|
||||||
<vn-card class="summary">
|
<vn-card class="summary">
|
||||||
<h5>
|
<h5>
|
||||||
|
@ -292,7 +293,7 @@
|
||||||
<vn-tr>
|
<vn-tr>
|
||||||
<vn-th field="id" number>Id</vn-th>
|
<vn-th field="id" number>Id</vn-th>
|
||||||
<vn-th field="nickname" expand>Client</vn-th>
|
<vn-th field="nickname" expand>Client</vn-th>
|
||||||
<vn-th field="salesPersonFk">Salesperson</vn-th>
|
<vn-th field="packages" shrink>Packages</vn-th>
|
||||||
<vn-th field="shipped" shrink-date>Date</vn-th>
|
<vn-th field="shipped" shrink-date>Date</vn-th>
|
||||||
<vn-th field="stateFk">State</vn-th>
|
<vn-th field="stateFk">State</vn-th>
|
||||||
<vn-th shrink>Total</vn-th>
|
<vn-th shrink>Total</vn-th>
|
||||||
|
@ -312,13 +313,8 @@
|
||||||
{{::ticket.nickname}}
|
{{::ticket.nickname}}
|
||||||
</span>
|
</span>
|
||||||
</vn-td>
|
</vn-td>
|
||||||
<vn-td>
|
<vn-td shrink>
|
||||||
<span
|
{{::ticket.packages}}
|
||||||
title="{{::ticket.userName}}"
|
|
||||||
vn-click-stop="workerDescriptor.show($event, ticket.salesPersonFk)"
|
|
||||||
class="link">
|
|
||||||
{{::ticket.userName | dashIfEmpty}}
|
|
||||||
</span>
|
|
||||||
</vn-td>
|
</vn-td>
|
||||||
<vn-td shrink-date>
|
<vn-td shrink-date>
|
||||||
<span class="chip {{::$ctrl.chipColor(ticket.shipped)}}">
|
<span class="chip {{::$ctrl.chipColor(ticket.shipped)}}">
|
||||||
|
@ -336,7 +332,7 @@
|
||||||
<span
|
<span
|
||||||
ng-show="::!ticket.refFk"
|
ng-show="::!ticket.refFk"
|
||||||
class="chip {{::$ctrl.stateColor(ticket)}}">
|
class="chip {{::$ctrl.stateColor(ticket)}}">
|
||||||
{{::ticket.state}}
|
{{::ticket.ticketState.state.name}}
|
||||||
</span>
|
</span>
|
||||||
</vn-td>
|
</vn-td>
|
||||||
<vn-td shrink>
|
<vn-td shrink>
|
||||||
|
|
|
@ -3,6 +3,21 @@ import Summary from 'salix/components/summary';
|
||||||
import './style.scss';
|
import './style.scss';
|
||||||
|
|
||||||
class Controller extends Summary {
|
class Controller extends Summary {
|
||||||
|
constructor($element, $) {
|
||||||
|
super($element, $);
|
||||||
|
|
||||||
|
this.ticketFilter = {
|
||||||
|
include: {
|
||||||
|
relation: 'ticketState',
|
||||||
|
scope: {
|
||||||
|
fields: ['stateFk', 'code', 'alertLevel'],
|
||||||
|
include: {
|
||||||
|
relation: 'state'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
$onChanges() {
|
$onChanges() {
|
||||||
if (!this.client)
|
if (!this.client)
|
||||||
return;
|
return;
|
||||||
|
@ -18,6 +33,7 @@ class Controller extends Summary {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
get isEmployee() {
|
get isEmployee() {
|
||||||
return this.aclService.hasAny(['employee']);
|
return this.aclService.hasAny(['employee']);
|
||||||
}
|
}
|
||||||
|
@ -41,13 +57,15 @@ class Controller extends Summary {
|
||||||
}
|
}
|
||||||
|
|
||||||
stateColor(ticket) {
|
stateColor(ticket) {
|
||||||
if (ticket.alertLevelCode === 'OK')
|
const ticketState = ticket.ticketState;
|
||||||
|
|
||||||
|
if (ticketState.code === 'OK')
|
||||||
return 'success';
|
return 'success';
|
||||||
else if (ticket.alertLevelCode === 'FREE')
|
else if (ticketState.code === 'FREE')
|
||||||
return 'notice';
|
return 'notice';
|
||||||
else if (ticket.alertLevel === 1)
|
else if (ticketState.alertLevel === 1)
|
||||||
return 'warning';
|
return 'warning';
|
||||||
else if (ticket.alertLevel === 0)
|
else if (ticketState.alertLevel === 0)
|
||||||
return 'alert';
|
return 'alert';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -76,25 +76,25 @@ describe('Client', () => {
|
||||||
|
|
||||||
describe('stateColor()', () => {
|
describe('stateColor()', () => {
|
||||||
it('should return "success" when the alertLevelCode property is "OK"', () => {
|
it('should return "success" when the alertLevelCode property is "OK"', () => {
|
||||||
const result = controller.stateColor({alertLevelCode: 'OK'});
|
const result = controller.stateColor({ticketState: {code: 'OK'}});
|
||||||
|
|
||||||
expect(result).toEqual('success');
|
expect(result).toEqual('success');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return "notice" when the alertLevelCode property is "FREE"', () => {
|
it('should return "notice" when the alertLevelCode property is "FREE"', () => {
|
||||||
const result = controller.stateColor({alertLevelCode: 'FREE'});
|
const result = controller.stateColor({ticketState: {code: 'FREE'}});
|
||||||
|
|
||||||
expect(result).toEqual('notice');
|
expect(result).toEqual('notice');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return "warning" when the alertLevel property is "1', () => {
|
it('should return "warning" when the alertLevel property is "1', () => {
|
||||||
const result = controller.stateColor({alertLevel: 1});
|
const result = controller.stateColor({ticketState: {code: 'PACKING', alertLevel: 1}});
|
||||||
|
|
||||||
expect(result).toEqual('warning');
|
expect(result).toEqual('warning');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return "alert" when the alertLevel property is "0"', () => {
|
it('should return "alert" when the alertLevel property is "0"', () => {
|
||||||
const result = controller.stateColor({alertLevel: 0});
|
const result = controller.stateColor({ticketState: {code: 'FIXING', alertLevel: 0}});
|
||||||
|
|
||||||
expect(result).toEqual('alert');
|
expect(result).toEqual('alert');
|
||||||
});
|
});
|
||||||
|
|
|
@ -19,6 +19,11 @@ module.exports = Self => {
|
||||||
description: 'The client id',
|
description: 'The client id',
|
||||||
required: true
|
required: true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
arg: 'nickname',
|
||||||
|
type: 'string',
|
||||||
|
description: 'The client nickname'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
arg: 'agencyModeFk',
|
arg: 'agencyModeFk',
|
||||||
type: 'number',
|
type: 'number',
|
||||||
|
@ -145,10 +150,11 @@ module.exports = Self => {
|
||||||
|
|
||||||
// Force to unroute ticket
|
// Force to unroute ticket
|
||||||
const hasToBeUnrouted = true;
|
const hasToBeUnrouted = true;
|
||||||
const query = 'CALL vn.ticket_componentMakeUpdate(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
|
const query = 'CALL vn.ticket_componentMakeUpdate(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
|
||||||
const res = await Self.rawSql(query, [
|
const res = await Self.rawSql(query, [
|
||||||
args.id,
|
args.id,
|
||||||
args.clientFk,
|
args.clientFk,
|
||||||
|
args.nickname,
|
||||||
args.agencyModeFk,
|
args.agencyModeFk,
|
||||||
args.addressFk,
|
args.addressFk,
|
||||||
args.zoneFk,
|
args.zoneFk,
|
||||||
|
|
|
@ -20,6 +20,16 @@
|
||||||
initial-data="$ctrl.clientId"
|
initial-data="$ctrl.clientId"
|
||||||
order="id">
|
order="id">
|
||||||
</vn-autocomplete>
|
</vn-autocomplete>
|
||||||
|
<vn-autocomplete vn-one
|
||||||
|
required="true"
|
||||||
|
url="Warehouses"
|
||||||
|
label="Warehouse"
|
||||||
|
show-field="name"
|
||||||
|
value-field="id"
|
||||||
|
ng-model="$ctrl.warehouseId">
|
||||||
|
</vn-autocomplete>
|
||||||
|
</vn-horizontal>
|
||||||
|
<vn-horizontal>
|
||||||
<vn-autocomplete
|
<vn-autocomplete
|
||||||
vn-one
|
vn-one
|
||||||
required="true"
|
required="true"
|
||||||
|
@ -44,14 +54,12 @@
|
||||||
</vn-icon-button>
|
</vn-icon-button>
|
||||||
</append>
|
</append>
|
||||||
</vn-autocomplete>
|
</vn-autocomplete>
|
||||||
<vn-autocomplete vn-one
|
<vn-textfield
|
||||||
|
vn-one
|
||||||
|
label="Alias"
|
||||||
required="true"
|
required="true"
|
||||||
url="Warehouses"
|
ng-model="$ctrl.ticket.nickname">
|
||||||
label="Warehouse"
|
</vn-textfield>
|
||||||
show-field="name"
|
|
||||||
value-field="id"
|
|
||||||
ng-model="$ctrl.warehouseId">
|
|
||||||
</vn-autocomplete>
|
|
||||||
</vn-horizontal>
|
</vn-horizontal>
|
||||||
<vn-horizontal>
|
<vn-horizontal>
|
||||||
<vn-autocomplete
|
<vn-autocomplete
|
||||||
|
|
|
@ -40,6 +40,7 @@ class Controller extends Component {
|
||||||
set addressId(value) {
|
set addressId(value) {
|
||||||
if (value != this.ticket.addressFk) {
|
if (value != this.ticket.addressFk) {
|
||||||
this.ticket.addressFk = value;
|
this.ticket.addressFk = value;
|
||||||
|
this.onChangeAddress(value);
|
||||||
this.getShipped({
|
this.getShipped({
|
||||||
landed: this.ticket.landed,
|
landed: this.ticket.landed,
|
||||||
addressFk: value,
|
addressFk: value,
|
||||||
|
@ -179,6 +180,14 @@ class Controller extends Component {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onChangeAddress(addressId) {
|
||||||
|
this.ticket.nickname = null;
|
||||||
|
const query = `Addresses/${addressId}`;
|
||||||
|
this.$http.get(query).then(res => {
|
||||||
|
this.ticket.nickname = res.data.nickname;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
async onStepChange() {
|
async onStepChange() {
|
||||||
if (this.isFormInvalid()) {
|
if (this.isFormInvalid()) {
|
||||||
return this.vnApp.showError(
|
return this.vnApp.showError(
|
||||||
|
|
|
@ -71,6 +71,7 @@ class Controller extends Component {
|
||||||
let query = `tickets/${this.ticket.id}/componentUpdate`;
|
let query = `tickets/${this.ticket.id}/componentUpdate`;
|
||||||
let params = {
|
let params = {
|
||||||
clientFk: this.ticket.clientFk,
|
clientFk: this.ticket.clientFk,
|
||||||
|
nickname: this.ticket.nickname,
|
||||||
agencyModeFk: this.ticket.agencyModeFk,
|
agencyModeFk: this.ticket.agencyModeFk,
|
||||||
addressFk: this.ticket.addressFk,
|
addressFk: this.ticket.addressFk,
|
||||||
zoneFk: this.ticket.zoneFk,
|
zoneFk: this.ticket.zoneFk,
|
||||||
|
|
Loading…
Reference in New Issue