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-id="ticketsModel"
|
||||
auto-load="true"
|
||||
url="Tickets/filter"
|
||||
link="{'t.clientFk': $ctrl.$params.id}"
|
||||
url="Tickets"
|
||||
link="{clientFk: $ctrl.$params.id}"
|
||||
filter="::$ctrl.ticketFilter"
|
||||
limit="5"
|
||||
data="tickets"
|
||||
order="shippedDate DESC, shippedHour ASC">
|
||||
order="shipped DESC">
|
||||
</vn-crud-model>
|
||||
<vn-card class="summary">
|
||||
<h5>
|
||||
|
@ -292,7 +293,7 @@
|
|||
<vn-tr>
|
||||
<vn-th field="id" number>Id</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="stateFk">State</vn-th>
|
||||
<vn-th shrink>Total</vn-th>
|
||||
|
@ -312,13 +313,8 @@
|
|||
{{::ticket.nickname}}
|
||||
</span>
|
||||
</vn-td>
|
||||
<vn-td>
|
||||
<span
|
||||
title="{{::ticket.userName}}"
|
||||
vn-click-stop="workerDescriptor.show($event, ticket.salesPersonFk)"
|
||||
class="link">
|
||||
{{::ticket.userName | dashIfEmpty}}
|
||||
</span>
|
||||
<vn-td shrink>
|
||||
{{::ticket.packages}}
|
||||
</vn-td>
|
||||
<vn-td shrink-date>
|
||||
<span class="chip {{::$ctrl.chipColor(ticket.shipped)}}">
|
||||
|
@ -336,7 +332,7 @@
|
|||
<span
|
||||
ng-show="::!ticket.refFk"
|
||||
class="chip {{::$ctrl.stateColor(ticket)}}">
|
||||
{{::ticket.state}}
|
||||
{{::ticket.ticketState.state.name}}
|
||||
</span>
|
||||
</vn-td>
|
||||
<vn-td shrink>
|
||||
|
|
|
@ -3,6 +3,21 @@ import Summary from 'salix/components/summary';
|
|||
import './style.scss';
|
||||
|
||||
class Controller extends Summary {
|
||||
constructor($element, $) {
|
||||
super($element, $);
|
||||
|
||||
this.ticketFilter = {
|
||||
include: {
|
||||
relation: 'ticketState',
|
||||
scope: {
|
||||
fields: ['stateFk', 'code', 'alertLevel'],
|
||||
include: {
|
||||
relation: 'state'
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
$onChanges() {
|
||||
if (!this.client)
|
||||
return;
|
||||
|
@ -18,6 +33,7 @@ class Controller extends Summary {
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
get isEmployee() {
|
||||
return this.aclService.hasAny(['employee']);
|
||||
}
|
||||
|
@ -41,13 +57,15 @@ class Controller extends Summary {
|
|||
}
|
||||
|
||||
stateColor(ticket) {
|
||||
if (ticket.alertLevelCode === 'OK')
|
||||
const ticketState = ticket.ticketState;
|
||||
|
||||
if (ticketState.code === 'OK')
|
||||
return 'success';
|
||||
else if (ticket.alertLevelCode === 'FREE')
|
||||
else if (ticketState.code === 'FREE')
|
||||
return 'notice';
|
||||
else if (ticket.alertLevel === 1)
|
||||
else if (ticketState.alertLevel === 1)
|
||||
return 'warning';
|
||||
else if (ticket.alertLevel === 0)
|
||||
else if (ticketState.alertLevel === 0)
|
||||
return 'alert';
|
||||
}
|
||||
|
||||
|
|
|
@ -76,25 +76,25 @@ describe('Client', () => {
|
|||
|
||||
describe('stateColor()', () => {
|
||||
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');
|
||||
});
|
||||
|
||||
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');
|
||||
});
|
||||
|
||||
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');
|
||||
});
|
||||
|
||||
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');
|
||||
});
|
||||
|
|
|
@ -19,6 +19,11 @@ module.exports = Self => {
|
|||
description: 'The client id',
|
||||
required: true
|
||||
},
|
||||
{
|
||||
arg: 'nickname',
|
||||
type: 'string',
|
||||
description: 'The client nickname'
|
||||
},
|
||||
{
|
||||
arg: 'agencyModeFk',
|
||||
type: 'number',
|
||||
|
@ -145,10 +150,11 @@ module.exports = Self => {
|
|||
|
||||
// Force to unroute ticket
|
||||
const hasToBeUnrouted = true;
|
||||
const query = 'CALL vn.ticket_componentMakeUpdate(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
|
||||
const query = 'CALL vn.ticket_componentMakeUpdate(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
|
||||
const res = await Self.rawSql(query, [
|
||||
args.id,
|
||||
args.clientFk,
|
||||
args.nickname,
|
||||
args.agencyModeFk,
|
||||
args.addressFk,
|
||||
args.zoneFk,
|
||||
|
|
|
@ -20,6 +20,16 @@
|
|||
initial-data="$ctrl.clientId"
|
||||
order="id">
|
||||
</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-one
|
||||
required="true"
|
||||
|
@ -44,14 +54,12 @@
|
|||
</vn-icon-button>
|
||||
</append>
|
||||
</vn-autocomplete>
|
||||
<vn-autocomplete vn-one
|
||||
<vn-textfield
|
||||
vn-one
|
||||
label="Alias"
|
||||
required="true"
|
||||
url="Warehouses"
|
||||
label="Warehouse"
|
||||
show-field="name"
|
||||
value-field="id"
|
||||
ng-model="$ctrl.warehouseId">
|
||||
</vn-autocomplete>
|
||||
ng-model="$ctrl.ticket.nickname">
|
||||
</vn-textfield>
|
||||
</vn-horizontal>
|
||||
<vn-horizontal>
|
||||
<vn-autocomplete
|
||||
|
|
|
@ -40,6 +40,7 @@ class Controller extends Component {
|
|||
set addressId(value) {
|
||||
if (value != this.ticket.addressFk) {
|
||||
this.ticket.addressFk = value;
|
||||
this.onChangeAddress(value);
|
||||
this.getShipped({
|
||||
landed: this.ticket.landed,
|
||||
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() {
|
||||
if (this.isFormInvalid()) {
|
||||
return this.vnApp.showError(
|
||||
|
|
|
@ -71,6 +71,7 @@ class Controller extends Component {
|
|||
let query = `tickets/${this.ticket.id}/componentUpdate`;
|
||||
let params = {
|
||||
clientFk: this.ticket.clientFk,
|
||||
nickname: this.ticket.nickname,
|
||||
agencyModeFk: this.ticket.agencyModeFk,
|
||||
addressFk: this.ticket.addressFk,
|
||||
zoneFk: this.ticket.zoneFk,
|
||||
|
|
Loading…
Reference in New Issue