Commit b4db11912b253544aa08c655dd9668aed1c8abbc

Authored by Jose Pinto
1 parent 65e7ac5fe5
Exists in master and in 1 other branch develop

filtros informe general unidad

src/js/controller-general-unidad.js
1 angular.module('focaModalInforme') 1 angular.module('focaModalInforme')
2 .controller('focaModalInformeGeneralUnidadController', 2 .controller('focaModalInformeGeneralUnidadController',
3 [ 3 [
4 '$filter', 4 '$filter',
5 '$scope', 5 '$scope',
6 '$uibModalInstance', 6 '$uibModalInstance',
7 'focaModalInformeGeneralUnidadService', 7 'focaModalInformeGeneralUnidadService',
8 'i18nService', 8 'i18nService',
9 'focaModalService', 9 'focaModalService',
10 function($filter, $scope, $uibModalInstance, 10 function($filter, $scope, $uibModalInstance,
11 focaModalInformeGeneralUnidadService, i18nService, focaModalService 11 focaModalInformeGeneralUnidadService, i18nService, focaModalService
12 ) { 12 ) {
13 i18nService.setCurrentLang('es'); 13 i18nService.setCurrentLang('es');
14 var fecha = new Date(); 14 var fecha = new Date();
15 $scope.generando = false; 15 $scope.generando = false;
16 $scope.buscar = true; 16 $scope.buscar = true;
17 $scope.informe = {}; 17 $scope.informe = {};
18 $scope.params = { 18 $scope.params = {
19 fechaHasta: new Date(), 19 fechaHasta: new Date(),
20 fechaDesde: new Date(fecha.setMonth(fecha.getMonth() - 1)), 20 fechaDesde: new Date(fecha.setMonth(fecha.getMonth() - 1)),
21 sector: undefined, 21 sector: undefined,
22 diferenciarProductos: false, 22 diferenciarProductos: false,
23 detallarPorMes: false 23 diferenciarMeses: false
24 }; 24 };
25 $scope.gridOptions = { 25 $scope.gridOptions = {
26 enableGridMenu: true, 26 enableGridMenu: true,
27 exporterMenuCsv: false, 27 exporterMenuCsv: false,
28 exporterPdfPageSize: 'A4', 28 exporterPdfPageSize: 'A4',
29 exporterPdfFooter: function (currentPage, pageCount) { 29 exporterPdfFooter: function (currentPage, pageCount) {
30 return { 30 return {
31 columns: [ 31 columns: [
32 {text: $filter('date')(new Date(), 'dd/MM/yyyy'), 32 {text: $filter('date')(new Date(), 'dd/MM/yyyy'),
33 margin: [40, 0]}, 33 margin: [40, 0]},
34 {text: currentPage + ' de ' + pageCount, 34 {text: currentPage + ' de ' + pageCount,
35 margin: [28, 0], alignment: 'right'} 35 margin: [28, 0], alignment: 'right'}
36 ] 36 ]
37 }; 37 };
38 }, 38 },
39 columnDefs: [ 39 columnDefs: [
40 { 40 {
41 field: 'vehiculo', 41 field: 'vehiculo',
42 enableSorting: false, 42 enableSorting: false,
43 cellClass: function(grid, row, col) { 43 cellClass: function(grid, row, col) {
44 if (grid.getCellValue(row,col).indexOf('Sector:') !== -1) 44 if (grid.getCellValue(row,col).indexOf('Sector:') !== -1)
45 return 'yellow w-100'; 45 return 'yellow w-100';
46 if (grid.getCellValue(row,col).indexOf('Producto:') !== -1) 46 if (grid.getCellValue(row,col).indexOf('Producto:') !== -1)
47 return 'red w-100'; 47 return 'red w-100';
48 if (grid.getCellValue(row,col).indexOf('Mes:') !== -1) 48 if (grid.getCellValue(row,col).indexOf('Fecha:') !== -1)
49 return 'green w-100'; 49 return 'green w-100';
50 } 50 }
51 }, 51 },
52 { 52 {
53 field: 'kmRecorridos', 53 field: 'kmRecorridos',
54 enableSorting: false, 54 enableSorting: false,
55 cellClass: function(grid, row, col) { 55 cellClass: function(grid, row, col) {
56 if (!grid.getCellValue(row,col)) 56 if (!grid.getCellValue(row,col))
57 return 'd-none'; 57 return 'd-none';
58 } 58 }
59 }, 59 },
60 { 60 {
61 field: 'litrosRepartidos', 61 field: 'litrosRepartidos',
62 enableSorting: false, 62 enableSorting: false,
63 cellClass: function(grid, row, col) { 63 cellClass: function(grid, row, col) {
64 if (!grid.getCellValue(row,col)) 64 if (!grid.getCellValue(row,col))
65 return 'd-none'; 65 return 'd-none';
66 } 66 }
67 }, 67 },
68 { 68 {
69 field: 'viajes', 69 field: 'viajes',
70 enableSorting: false, 70 enableSorting: false,
71 cellClass: function(grid, row, col) { 71 cellClass: function(grid, row, col) {
72 if (!grid.getCellValue(row,col)) 72 if (!grid.getCellValue(row,col))
73 return 'd-none'; 73 return 'd-none';
74 } 74 }
75 } 75 }
76 ] 76 ]
77 }; 77 };
78 $scope.generarInforme = function() { 78 $scope.generarInforme = function() {
79 $scope.generando = true; 79 $scope.generando = true;
80 focaModalInformeGeneralUnidadService 80 focaModalInformeGeneralUnidadService
81 .getInformeData($scope.params) 81 .getInformeData($scope.params)
82 .then(function(res) { 82 .then(function(res) {
83 var result = []; 83 var result = [];
84 84
85 res.data.forEach(function(sector) { 85 res.data.forEach(function(sector) {
86 if (!$scope.params.sector || 86 if (!$scope.params.sector ||
87 $scope.params.sector.ID === sector.idSector) { 87 $scope.params.sector.ID === sector.idSector) {
88 //AGREGO SECTORES 88 //AGREGO SECTORES
89 result.push({ 89 result.push({
90 vehiculo: 'Sector: ' + 90 vehiculo: 'Sector: ' +
91 $filter('rellenarDigitos')(sector.idSector, 2, '0') + 91 $filter('rellenarDigitos')(sector.idSector, 2, '0') +
92 ' - ' + sector.sector.trim() 92 ' - ' + sector.sector.trim()
93 }); 93 });
94 if (!$scope.params.diferenciarProductos)
95 sector.productos = unirProductos(sector.productos);
96
94 sector.productos.forEach(function(producto) { 97 sector.productos.forEach(function(producto) {
95 //AGREGO PRODUCTOS 98 //AGREGO PRODUCTOS
96 result.push({ 99 if ($scope.params.diferenciarProductos){
97 vehiculo: 'Producto: ' +
98 producto.idProducto +
99 ' - ' + producto.producto
100 });
101 producto.fechas.forEach(function(fecha) {
102 //AGREGO FECHAS
103 result.push({ 100 result.push({
104 vehiculo: 'Mes: ' + fecha.fecha 101 vehiculo: 'Producto: ' +
102 producto.idProducto +
103 ' - ' + producto.producto
105 }); 104 });
105 }
106 if (!$scope.params.diferenciarMeses) {
107 producto.fechas = unirFechas(producto.fechas);
108 }
109 producto.fechas.forEach(function(fecha) {
110 //AGREGO FECHAS
111 if ($scope.params.diferenciarMeses) {
112 result.push({
113 vehiculo:
114 'Fecha: ' + fecha.month + ' - ' + fecha.year
115 });
116 } else {
117 result.push({
118 vehiculo:
119 'Fecha: ' + fecha.year
120 });
121 }
106 fecha.vehiculos.forEach(function(vehiculo) { 122 fecha.vehiculos.forEach(function(vehiculo) {
107 //AGREGO VEHICULOS 123 //AGREGO VEHICULOS
108 result.push({ 124 result.push({
109 vehiculo: vehiculo.vehiculo, 125 vehiculo: vehiculo.vehiculo,
110 kmRecorridos: 126 kmRecorridos:
111 $filter('number')(vehiculo.data.kms, 2), 127 $filter('number')(vehiculo.data.kms, 2),
112 litrosRepartidos: 128 litrosRepartidos:
113 $filter('number')(vehiculo.data.lts, 2), 129 $filter('number')(vehiculo.data.lts, 2),
114 viajes: 130 viajes:
115 $filter('number')(vehiculo.data.viajes, 0) 131 $filter('number')(vehiculo.data.viajes, 0)
116 }); 132 });
117 }); 133 });
118 }); 134 });
119 }); 135 });
120 } 136 }
121 }); 137 });
122 138
123 $scope.gridOptions.data = result; 139 $scope.gridOptions.data = result;
124 $scope.generando = false; 140 $scope.generando = false;
125 $scope.buscar = false; 141 $scope.buscar = false;
126 }); 142 });
127 }; 143 };
128 144
129 $scope.seleccionarSector = function(key) { 145 $scope.seleccionarSector = function(key) {
130 if (key === 13) { 146 if (key === 13) {
131 var parametrosModal = { 147 var parametrosModal = {
132 titulo: 'Búsqueda de Sector', 148 titulo: 'Búsqueda de Sector',
133 query: '/sector', 149 query: '/sector',
134 columnas: [ 150 columnas: [
135 { 151 {
136 nombre: 'Código', 152 nombre: 'Código',
137 propiedad: 'ID' 153 propiedad: 'ID'
138 }, 154 },
139 { 155 {
140 nombre: 'Nombre', 156 nombre: 'Nombre',
141 propiedad: 'NOMBRE' 157 propiedad: 'NOMBRE'
142 } 158 }
143 ], 159 ],
144 size: 'md' 160 size: 'md'
145 }; 161 };
146 focaModalService.modal(parametrosModal).then( 162 focaModalService.modal(parametrosModal).then(
147 function(sector) { 163 function(sector) {
148 $scope.params.sector = sector; 164 $scope.params.sector = sector;
149 }, function() {} 165 }, function() {}
150 ); 166 );
151 } 167 }
152 }; 168 };
153 $scope.volver = function() { 169 $scope.volver = function() {
154 $scope.buscar = true; 170 $scope.buscar = true;
155 }; 171 };
156 $scope.cancel = function() { 172 $scope.cancel = function() {
157 $uibModalInstance.dismiss('Cancelar'); 173 $uibModalInstance.dismiss('Cancelar');
158 }; 174 };
175
176 function unirProductos(productos) {
177 var result = [{fechas: []}];
178 productos.forEach(function(producto) {
179 producto.fechas.forEach(function(fecha) {
180 var existe = result[0].fechas.filter(function(result) {
181 return result.fecha === fecha.fecha;
182 });
183 if (existe.length) {
184 existe[0].vehiculos = existe[0].vehiculos.concat(fecha.vehiculos);
185 } else {
186 result[0].fechas.push(fecha);
187 }
188
189 });
190 });
191 result[0].fechas.forEach(function(fecha) {
192 fecha.vehiculos = unirVehiculos(fecha.vehiculos);
193 });
194 return result;
195 }
196
197 function unirFechas(fechas) {
198 var results = [];
199 fechas.forEach(function(fecha) {
200 var existe = results.filter(function(result) {
201 return result.year === fecha.year;
202 });
203
204 if (existe.length) {
205 existe[0].vehiculos = existe[0].vehiculos.concat(fecha.vehiculos);
206 } else {
207 results.push({
208 year: fecha.year,
209 vehiculos: fecha.vehiculos
210 });
211 }
212 });
213
214 results.forEach(function(result) {
215 result.vehiculos = unirVehiculos(result.vehiculos);
216 });
217 return results;
218 }
219
220 function unirVehiculos(vehiculos) {
221 var results = [];
222 vehiculos.forEach(function(vehiculo) {
223 var existe = results.filter(function(result) {
224 return result.vehiculo === vehiculo.vehiculo;
225 });
226
227 if (existe.length) {
228 existe[0].data.kms += vehiculo.data.kms;
229 existe[0].data.lts += vehiculo.data.lts;
230 existe[0].data.viajes += vehiculo.data.viajes;
231 } else {
232 results.push(vehiculo);
233 }
234 });
235 return results;
236 }
src/views/informe-general-unidad.html
1 <div class="modal-header py-1"> 1 <div class="modal-header py-1">
2 <div class="row w-100"> 2 <div class="row w-100">
3 <div class="col-6" ng-bind="informe.nombreEmpresa" ng-hide="buscar"></div> 3 <div class="col-6" ng-bind="informe.nombreEmpresa" ng-hide="buscar"></div>
4 <div class="col-6 text-right" ng-bind="informe.direccionEmpresa" ng-hide="buscar"></div> 4 <div class="col-6 text-right" ng-bind="informe.direccionEmpresa" ng-hide="buscar"></div>
5 <div class="col-12"><h5 class="modal-title">Informe general por unidad de reparto</h5></div> 5 <div class="col-12"><h5 class="modal-title">Informe general por unidad de reparto</h5></div>
6 <div class="col-12" ng-hide="buscar">Filtros: Fecha desde: {{params.fechaDesde | date: 'dd/MM/yyyy'}} Fecha hasta: {{params.fechaHasta | date: 'dd/MM/yyyy'}}</div> 6 <div class="col-12" ng-hide="buscar">Filtros: Fecha desde: {{params.fechaDesde | date: 'dd/MM/yyyy'}} Fecha hasta: {{params.fechaHasta | date: 'dd/MM/yyyy'}}</div>
7 </div> 7 </div>
8 </div> 8 </div>
9 <div class="modal-body" id="modal-body"> 9 <div class="modal-body" id="modal-body">
10 10
11 <div class="input-group row" 11 <div class="input-group row"
12 ng-show="buscar"> 12 ng-show="buscar">
13 <small class="col-md-2 col-4 text-left my-1">Fecha Desde</small> 13 <small class="col-md-2 col-4 text-left my-1">Fecha Desde</small>
14 <div class="col-md-4 col-8 input-group mb-2"> 14 <div class="col-md-4 col-8 input-group mb-2">
15 <div class="input-group-prepend"> 15 <div class="input-group-prepend">
16 <div class="input-group-text form-control-sm"> 16 <div class="input-group-text form-control-sm">
17 <i class="fa fa-calendar"></i> 17 <i class="fa fa-calendar"></i>
18 </div> 18 </div>
19 </div> 19 </div>
20 <input 20 <input
21 class="form-control form-control-sm" 21 class="form-control form-control-sm"
22 id="inlineFormInputGroup" 22 id="inlineFormInputGroup"
23 type="text" 23 type="text"
24 ng-model="params.fechaDesde" 24 ng-model="params.fechaDesde"
25 ng-required="true" 25 ng-required="true"
26 uib-datepicker-popup="dd/MM/yyyy" 26 uib-datepicker-popup="dd/MM/yyyy"
27 show-button-bar="false" 27 show-button-bar="false"
28 is-open="datepickerOpen" 28 is-open="datepickerOpen"
29 on-open-focus="false" 29 on-open-focus="false"
30 ng-focus="datepickerOpen = true" 30 ng-focus="datepickerOpen = true"
31 datepicker-options="dateOptions" 31 datepicker-options="dateOptions"
32 /> 32 />
33 </div> 33 </div>
34 <small class="col-md-2 col-4 text-left my-1">Fecha Hasta</small> 34 <small class="col-md-2 col-4 text-left my-1">Fecha Hasta</small>
35 <div class="col-md-4 col-8 input-group mb-2"> 35 <div class="col-md-4 col-8 input-group mb-2">
36 <div class="input-group-prepend"> 36 <div class="input-group-prepend">
37 <div class="input-group-text form-control-sm"> 37 <div class="input-group-text form-control-sm">
38 <i class="fa fa-calendar"></i> 38 <i class="fa fa-calendar"></i>
39 </div> 39 </div>
40 </div> 40 </div>
41 <input 41 <input
42 class="form-control form-control-sm" 42 class="form-control form-control-sm"
43 id="inlineFormInputGroup" 43 id="inlineFormInputGroup"
44 type="text" 44 type="text"
45 ng-model="params.fechaHasta" 45 ng-model="params.fechaHasta"
46 ng-required="true" 46 ng-required="true"
47 uib-datepicker-popup="dd/MM/yyyy" 47 uib-datepicker-popup="dd/MM/yyyy"
48 show-button-bar="false" 48 show-button-bar="false"
49 is-open="datepicker2Open" 49 is-open="datepicker2Open"
50 on-open-focus="false" 50 on-open-focus="false"
51 ng-focus="datepicker2Open = true" 51 ng-focus="datepicker2Open = true"
52 /> 52 />
53 </div> 53 </div>
54 <small class="col-md-2 col-4 text-left my-1">Sector</small> 54 <small class="col-md-2 col-4 text-left my-1">Sector</small>
55 <div class="col-md-4 col-8 input-group mb-2"> 55 <div class="col-md-4 col-8 input-group mb-2">
56 <input 56 <input
57 class="form-control form-control-sm" 57 class="form-control form-control-sm"
58 id="inlineFormInputGroup" 58 id="inlineFormInputGroup"
59 type="text" 59 type="text"
60 ng-model="params.sector.NOMBRE" 60 ng-model="params.sector.NOMBRE"
61 ng-required="true" 61 ng-required="true"
62 ng-keypress="seleccionarSector($event.keyCode)" 62 ng-keypress="seleccionarSector($event.keyCode)"
63 /> 63 />
64 <div class="input-group-append"> 64 <div class="input-group-append">
65 <div class="input-group-append" ng-hide="ingreso"> 65 <div class="input-group-append" ng-hide="ingreso">
66 <button 66 <button
67 ladda="searchLoading" 67 ladda="searchLoading"
68 data-spinner-color="#FF0000" 68 data-spinner-color="#FF0000"
69 class="btn btn-outline-secondary" 69 class="btn btn-outline-secondary"
70 type="button" 70 type="button"
71 ng-click="seleccionarSector(13)"> 71 ng-click="seleccionarSector(13)">
72 <i class="fa fa-search" aria-hidden="true"></i> 72 <i class="fa fa-search" aria-hidden="true"></i>
73 </button> 73 </button>
74 </div> 74 </div>
75 </div> 75 </div>
76 </div> 76 </div>
77 <small class="col-md-4 col-8 text-left my-1">Diferenciar productos</small> 77 <small class="col-md-4 col-8 text-left my-1">Diferenciar productos</small>
78 <div class="col-md-2 col-4 input-group mb-2"> 78 <div class="col-md-2 col-4 input-group mb-2">
79 <div class="custom-control custom-checkbox ml-auto"> 79 <div class="custom-control custom-checkbox ml-auto">
80 <input 80 <input
81 type="checkbox" 81 type="checkbox"
82 class="custom-control-input" 82 class="custom-control-input"
83 ng-model="params.diferenciarProductos" 83 ng-model="params.diferenciarProductos"
84 id="customCheck1"> 84 id="customCheck1">
85 <label class="custom-control-label" for="customCheck1"></label> 85 <label class="custom-control-label" for="customCheck1"></label>
86 </div> 86 </div>
87 </div> 87 </div>
88 <small class="col-md-4 col-8 text-left my-1">Detallar por mes</small> 88 <small class="col-md-4 col-8 text-left my-1">Detallar por mes</small>
89 <div class="col-md-2 col-4 input-group mb-2"> 89 <div class="col-md-2 col-4 input-group mb-2">
90 <div class="custom-control custom-checkbox ml-auto"> 90 <div class="custom-control custom-checkbox ml-auto">
91 <input 91 <input
92 type="checkbox" 92 type="checkbox"
93 class="custom-control-input" 93 class="custom-control-input"
94 ng-model="params.detallarPorMes" 94 ng-model="params.diferenciarMeses"
95 id="customCheck2"> 95 id="customCheck2">
96 <label class="custom-control-label" for="customCheck2"></label> 96 <label class="custom-control-label" for="customCheck2"></label>
97 </div> 97 </div>
98 </div> 98 </div>
99 </div> 99 </div>
100 <div 100 <div
101 ng-if="!buscar" 101 ng-if="!buscar"
102 class="row"> 102 class="row">
103 <div class="col-12"> 103 <div class="col-12">
104 <div 104 <div
105 class="gridInforme" 105 class="gridInforme"
106 ui-grid="gridOptions" 106 ui-grid="gridOptions"
107 ui-grid-exporter 107 ui-grid-exporter
108 ui-grid-resize-columns 108 ui-grid-resize-columns
109 ></div> 109 ></div>
110 </div> 110 </div>
111 </div> 111 </div>
112 </div> 112 </div>
113 <div class="modal-footer py-1"> 113 <div class="modal-footer py-1">
114 <button 114 <button
115 class="btn btn-sm btn-secondary" 115 class="btn btn-sm btn-secondary"
116 type="button" 116 type="button"
117 ng-click="cancel()" 117 ng-click="cancel()"
118 ng-show="buscar">Cancelar</button> 118 ng-show="buscar">Cancelar</button>
119 <button 119 <button
120 ladda="generando" 120 ladda="generando"
121 class="btn btn-sm btn-secondary" 121 class="btn btn-sm btn-secondary"
122 type="button" 122 type="button"
123 ng-click="generarInforme()" 123 ng-click="generarInforme()"
124 ng-show="buscar">Generar</button> 124 ng-show="buscar">Generar</button>
125 <button 125 <button
126 class="btn btn-sm btn-secondary" 126 class="btn btn-sm btn-secondary"
127 type="button" 127 type="button"
128 ng-click="volver()" 128 ng-click="volver()"
129 ng-hide="buscar">Volver</button> 129 ng-hide="buscar">Volver</button>
130 </div> 130 </div>
131 131