Merge branch 'dev' into 2980-invoiceIn_fixes
gitea/salix/pipeline/head This commit looks good Details

This commit is contained in:
Joan Sanchez 2021-06-18 14:15:42 +00:00
commit 6acf922d3b
8 changed files with 169 additions and 28 deletions

View File

@ -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 ;

View File

@ -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>

View File

@ -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';
} }

View File

@ -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');
}); });

View File

@ -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,

View File

@ -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

View File

@ -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(

View File

@ -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,