Commit 3290df65b938b085f6f9be7c42543135553b4c33

Authored by Nicolás Guarnieri
Exists in master and in 1 other branch develop

Merge branch 'master' into 'master'

Master

See merge request !1
File was created 1 /node_modules
2 /dist
3 /tmp
4 package-lock\.json
5
6 src/etc/develop\.js
7
File was created 1 {
2 /*
3 * ENVIRONMENTS
4 * =================
5 */
6
7 // Define globals exposed by modern browsers.
8 "browser": true,
9
10 // Define globals exposed by jQuery.
11 "jquery": true,
12
13 // Define globals exposed by Node.js.
14 "node": true,
15
16 // Allow ES6.
17 "esversion": 6,
18
19 /*
20 * ENFORCING OPTIONS
21 * =================
22 */
23
24 // Force all variable names to use either camelCase style or UPPER_CASE
25 // with underscores.
26 "camelcase": true,
27
28 // Prohibit use of == and != in favor of === and !==.
29 "eqeqeq": true,
30
31 // Enforce tab width of 2 spaces.
32 "indent": 4,
33
34 // Prohibit use of a variable before it is defined.
35 "latedef": false,
36
37 // Enforce line length to 100 characters
38 "maxlen": 100,
39
40 // Require capitalized names for constructor functions.
41 "newcap": true,
42
43 // Enforce use of single quotation marks for strings.
44 "quotmark": "single",
45
46 // Enforce placing 'use strict' at the top function scope
47 "strict": false,
48
49 // Prohibit use of explicitly undeclared variables.
50 "undef": true,
51
52 // Warn when variables are defined but never used.
53 "unused": true,
54
55 // Para que funcione en angular
56 "predef": ["angular", "alert", "spyOn", "expect", "it", "inject", "beforeEach", "describe"],
57 /*
58 * RELAXING OPTIONS
59 * =================
60 */
61
62 // Suppress warnings about == null comparisons.
63 "eqnull": true
64 }
65
File was created 1 const templateCache = require('gulp-angular-templatecache');
2 const concat = require('gulp-concat');
3 const htmlmin = require('gulp-htmlmin');
4 const rename = require('gulp-rename');
5 const uglify = require('gulp-uglify');
6 const gulp = require('gulp');
7 const pump = require('pump');
8 const jshint = require('gulp-jshint');
9 const replace = require('gulp-replace');
10 const connect = require('gulp-connect');
11 const clean = require('gulp-clean');
12
13 var paths = {
14 srcJS: 'src/js/*.js',
15 srcViews: 'src/views/*.html',
16 tmp: 'tmp',
17 dist: 'dist/'
18 };
19
20 gulp.task('clean', function() {
21 return gulp.src(['tmp', 'dist'], {read: false})
22 .pipe(clean());
23 });
24
25 gulp.task('templates', ['clean'], function() {
26 return pump(
27 [
28 gulp.src(paths.srcViews),
29 htmlmin(),
30 templateCache('views.js', {
31 module: 'focaModalInforme',
32 root: ''
33 }),
34 gulp.dest(paths.tmp)
35 ]
36 );
37 });
38
39 gulp.task('uglify', ['templates'], function() {
40 return pump(
41 [
42 gulp.src([
43 paths.srcJS,
44 'tmp/views.js'
45 ]),
46 concat('foca-modal-informe.js'),
47 replace('src/views/', ''),
48 gulp.dest(paths.tmp),
49 rename('foca-modal-informe.min.js'),
50 uglify(),
51 gulp.dest(paths.dist)
52 ]
53 );
54 });
55
56 gulp.task('pre-commit', function() {
57 return pump(
58 [
59 gulp.src(paths.srcJS),
60 jshint('.jshintrc'),
61 jshint.reporter('default'),
62 jshint.reporter('fail')
63 ]
64 );
65
66 gulp.start('uglify');
67 });
68
69 gulp.task('webserver', function() {
70 pump [
71 connect.server({port: 3000})
72 ]
73 });
74
75 gulp.task('clean-post-install', function() {
76 return gulp.src(['src', 'tmp', '.jshintrc','readme.md', '.gitignore', 'gulpfile.js',
77 'index.html'], {read: false})
78 .pipe(clean());
79 });
80
81 gulp.task('default', ['webserver']);
82
83 gulp.task('watch', function() {
84 gulp.watch([paths.srcJS, paths.srcViews], ['uglify'])
85 });
86
87 gulp.task('copy', ['uglify'], function() {
88 gulp.src('dist/*.js')
89 .pipe(gulp.dest('../wrapper-demo/node_modules/foca-informe-hoja-ruta/dist'));
90 });
91
92 gulp.task('watchAndCopy', function() {
93 return gulp.watch([paths.srcJS, paths.srcViews], ['copy']);
94 });
95
File was created 1 {
2 "name": "foca-modal-informe",
3 "version": "0.0.1",
4 "description": "Modales generadoras de informes",
5 "scripts": {
6 "test": "echo \"Error: no test specified\" && exit 1",
7 "gulp-pre-commit": "gulp pre-commit",
8 "compile": "gulp uglify",
9 "postinstall": "npm run compile && gulp clean-post-install",
10 "install-dev": "npm install -D angular angular-ladda ladda@1.0.6 bootstrap font-awesome gulp gulp-angular-templatecache gulp-concat gulp-connect gulp-htmlmin gulp-jshint gulp-rename gulp-replace gulp-uglify gulp-clean jasmine-core jquery jshint pre-commit pump ui-bootstrap4 && npm i -D git+http://git.focasoftware.com/npm/foca-directivas.git"
11 },
12 "pre-commit": [
13 "gulp-pre-commit"
14 ],
15 "repository": {
16 "type": "git",
17 "url": "http://git.focasoftware.com/npm/foca-modal-informe"
18 },
19 "author": "Foca software",
20 "license": "ISC",
21 "peerDependencies": {
22 "angular": "^1.7.4",
23 "bootstrap": "^4.1.3",
24 "font-awesome": "^4.7.0",
25 "ui-bootstrap4": "^3.0.4",
26 "gulp": "^3.9.1",
27 "gulp-angular-templatecache": "^2.2.1",
28 "gulp-concat": "^2.6.1",
29 "gulp-connect": "^5.6.1",
30 "gulp-htmlmin": "^5.0.1",
31 "gulp-rename": "^1.4.0",
32 "gulp-replace": "^1.0.0",
33 "gulp-uglify": "^3.0.1",
34 "jquery": "^3.3.1",
35 "pump": "^3.0.0",
36 "foca-directivas": "git+http://git.focasoftware.com/npm/foca-directivas.git"
37 },
38 "devDependencies": {
39 "angular": "^1.7.5",
40 "angular-ladda": "^0.4.3",
41 "bootstrap": "^4.1.3",
42 "foca-directivas": "git+http://git.focasoftware.com/npm/foca-directivas.git",
43 "font-awesome": "^4.7.0",
44 "gulp": "^3.9.1",
45 "gulp-angular-templatecache": "^2.2.3",
46 "gulp-clean": "^0.4.0",
47 "gulp-concat": "^2.6.1",
48 "gulp-connect": "^5.6.1",
49 "gulp-htmlmin": "^5.0.1",
50 "gulp-jshint": "^2.1.0",
51 "gulp-rename": "^1.4.0",
52 "gulp-replace": "^1.0.0",
53 "gulp-uglify": "^3.0.1",
54 "jasmine-core": "^3.3.0",
55 "jquery": "^3.3.1",
56 "jshint": "^2.9.6",
57 "ladda": "1.0.6",
58 "pre-commit": "^1.2.2",
59 "pump": "^3.0.0",
60 "ui-bootstrap4": "^3.0.5"
61 }
62 }
63
src/etc/develop.js.ejemplo
File was created 1 angular.module('focaModalInforme')
2 .constant("API_ENDPOINT", {
3 'URL': '//127.0.0.1:9000'
4 });
5
File was created 1 angular.module('focaModalInforme', []);
2
src/js/controller-chofer.js
File was created 1 angular.module('focaModalInforme')
2 .controller('focaModalInformeChoferController',
3 [
4 '$filter',
5 '$scope',
6 '$uibModalInstance',
7 'focaModalInformeChoferService',
8 'i18nService',
9 function($filter, $scope, $uibModalInstance,
10 focaModalInformeChoferService, i18nService
11 ) {
12 var fecha = new Date();
13 $scope.generando = false;
14 $scope.fechaHasta = new Date();
15 $scope.fechaDesde = new Date(fecha.setMonth(fecha.getMonth() - 1));
16 $scope.buscar = true;
17 $scope.informe = {};
18 i18nService.setCurrentLang('es');
19 $scope.gridOptions = {
20 enableGridMenu: true,
21 exporterMenuCsv: false,
22 exporterPdfPageSize: 'A4',
23 exporterPdfFooter: function(currentPage, pageCount) {
24 return {
25 columns: [
26 {text: $filter('date')(new Date(), 'dd/MM/yyyy'),
27 margin: [40, 0]},
28 {text: currentPage + ' de ' + pageCount,
29 margin: [28, 0], alignment: 'right'}
30 ]
31 };
32 }
33 };
34 $scope.generarInforme = function() {
35 $scope.generando = true;
36 focaModalInformeChoferService
37 .getDescargas(
38 $scope.fechaDesde.toISOString().split('.')[0],
39 $scope.fechaHasta.toISOString().split('.')[0]
40 )
41 .then(function(res) {
42 var promesas = [];
43 $scope.gridOptions.data = orderData(res.data);
44
45 res.data.forEach(function(descargas) {
46 var idsRemito = descargas.map(function(descarga) {
47 return descarga.remito.id;
48 });
49 idsRemito = eliminarDuplicados(idsRemito);
50 promesas.push(
51 focaModalInformeChoferService
52 .getDistanciaPorIdRemito(idsRemito));
53 });
54 return Promise.all(promesas);
55 })
56 .then(function(res) {
57 res.forEach(function(movimiento, idx) {
58 //Calculo lts/km y los agrego a la grilla
59 var ltsPorKm = 0;
60 if (movimiento.data.totalKms) {
61 ltsPorKm =
62 $scope.gridOptions.data[idx].litros /
63 movimiento.data.totalKms;
64 } else {
65 ltsPorKm = $scope.gridOptions.data[idx].litros;
66 }
67 $scope.gridOptions.data[idx].kmRecorridos =
68 $filter('number')(movimiento.data.totalKms);
69 $scope.gridOptions.data[idx].ltsPorKm =
70 $filter('number')(ltsPorKm, 7);
71 });
72 //TODO: sacar id empresa hardcodeado
73 return focaModalInformeChoferService.getEmpresa(1);
74 })
75 .then(function(res) {
76 //Seteo filename para PDF y Excel, y cabecera de PDF
77 var filenameStamp = 'Informe choferes - ' +
78 $filter('date')(new Date(), 'dd/MM/yyyy');
79 $scope.informe.nombreEmpresa = res.data.NOM.trim();
80 $scope.informe.direccionEmpresa = res.data.DIR.trim();
81 $scope.gridOptions.exporterPdfFilename = filenameStamp + '.pdf';
82 $scope.gridOptions.exporterExcelFilename = filenameStamp + '.xlsx';
83 $scope.gridOptions.exporterPdfHeader = {
84 columns: [
85 {
86 text: $scope.informe.nombreEmpresa,
87 margin: [40, 0],
88 fontSize: 9
89 },
90 {
91 text: '\nInforme de choferes',
92 margin: [-170, -4, 0, 0],
93 fontSize: 12
94 },
95 {
96 text: [
97 '\n\nFiltros: ',
98 'Fecha desde: ',
99 $filter('date')($scope.fechaDesde, 'dd/MM/yyyy'),
100 ' Fecha hasta: ',
101 $filter('date')($scope.fechaHasta, 'dd/MM/yyyy')
102 ],
103 margin: [-380, 2, 0, 0],
104 fontSize: 9
105 },
106 {
107 text: $scope.informe.direccionEmpresa,
108 margin: [28, 0],
109 alignment: 'right',
110 fontSize: 9
111 }
112 ]
113 };
114 $scope.buscar = false;
115 $scope.generando = false;
116 });
117 };
118 $scope.volver = function() {
119 $scope.buscar = true;
120 };
121 $scope.cancel = function() {
122 $uibModalInstance.dismiss('Cancelar');
123 };
124
125 function orderData(data) {
126 var result = [];
127 data.forEach(function(descargas) {
128 var row = {
129 chofer: descargas[0].remito.hojaRuta.chofer.nombre,
130 litros: 0
131 };
132 descargas.forEach(function(descarga) {
133 row.litros += descarga.cantidad;
134 });
135 result.push(row);
136 });
137 return result;
138 }
139
140 function eliminarDuplicados(datos) {
141 var result = [];
142 datos.forEach(function(dato) {
143 if (result.indexOf(dato) === -1) {
144 result.push(dato);
145 }
146 });
147 return result;
148 }
149 }
150 ]
151 );
152
src/js/controller-general-unidad.js
File was created 1 angular.module('focaModalInforme')
2 .controller('focaModalInformeGeneralUnidadController',
3 [
4 '$filter',
5 '$scope',
6 '$uibModalInstance',
7 'focaModalInformeGeneralUnidadService',
8 'i18nService',
9 'focaModalService',
10 function($filter, $scope, $uibModalInstance,
11 focaModalInformeGeneralUnidadService, i18nService, focaModalService
12 ) {
13 i18nService.setCurrentLang('es');
14 var fecha = new Date();
15 $scope.generando = false;
16 $scope.buscar = true;
17 $scope.informe = {};
18 $scope.params = {
19 fechaHasta: new Date(),
20 fechaDesde: new Date(fecha.setMonth(fecha.getMonth() - 1)),
21 sector: undefined,
22 diferenciarProductos: false,
23 diferenciarMeses: false
24 };
25 $scope.gridOptions = {
26 enableGridMenu: true,
27 exporterMenuCsv: false,
28 exporterPdfPageSize: 'A4',
29 exporterPdfFooter: function (currentPage, pageCount) {
30 return {
31 columns: [
32 {text: $filter('date')(new Date(), 'dd/MM/yyyy'),
33 margin: [40, 0]},
34 {text: currentPage + ' de ' + pageCount,
35 margin: [28, 0], alignment: 'right'}
36 ]
37 };
38 },
39 columnDefs: [
40 {
41 field: 'vehiculo',
42 enableSorting: false,
43 cellClass: function(grid, row, col) {
44 if (grid.getCellValue(row,col).indexOf('Sector:') !== -1)
45 return 'yellow w-100';
46 if (grid.getCellValue(row,col).indexOf('Producto:') !== -1)
47 return 'red w-100';
48 if (grid.getCellValue(row,col).indexOf('Fecha:') !== -1)
49 return 'green w-100';
50 }
51 },
52 {
53 field: 'kmRecorridos',
54 enableSorting: false,
55 cellClass: function(grid, row, col) {
56 if (!grid.getCellValue(row,col))
57 return 'd-none';
58 }
59 },
60 {
61 field: 'litrosRepartidos',
62 enableSorting: false,
63 cellClass: function(grid, row, col) {
64 if (!grid.getCellValue(row,col))
65 return 'd-none';
66 }
67 },
68 {
69 field: 'viajes',
70 enableSorting: false,
71 cellClass: function(grid, row, col) {
72 if (!grid.getCellValue(row,col))
73 return 'd-none';
74 }
75 }
76 ]
77 };
78 $scope.generarInforme = function() {
79 $scope.generando = true;
80 focaModalInformeGeneralUnidadService
81 .getInformeData($scope.params)
82 .then(function(res) {
83 var result = [];
84
85 res.data.forEach(function(sector) {
86 if (!$scope.params.sector ||
87 $scope.params.sector.ID === sector.idSector) {
88 //AGREGO SECTORES
89 result.push({
90 vehiculo: 'Sector: ' +
91 $filter('rellenarDigitos')(sector.idSector, 2, '0') +
92 ' - ' + sector.sector.trim()
93 });
94 if (!$scope.params.diferenciarProductos)
95 sector.productos = unirProductos(sector.productos);
96
97 sector.productos.forEach(function(producto) {
98 //AGREGO PRODUCTOS
99 if ($scope.params.diferenciarProductos){
100 result.push({
101 vehiculo: 'Producto: ' +
102 producto.idProducto +
103 ' - ' + producto.producto
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 }
122 fecha.vehiculos.forEach(function(vehiculo) {
123 //AGREGO VEHICULOS
124 result.push({
125 vehiculo: vehiculo.vehiculo,
126 kmRecorridos:
127 $filter('number')(vehiculo.data.kms, 2),
128 litrosRepartidos:
129 $filter('number')(vehiculo.data.lts, 2),
130 viajes:
131 $filter('number')(vehiculo.data.viajes, 0)
132 });
133 });
134 });
135 });
136 }
137 });
138
139 $scope.gridOptions.data = result;
140 $scope.generando = false;
141 $scope.buscar = false;
142 });
143 };
144
145 $scope.seleccionarSector = function(key) {
146 if (key === 13) {
147 var parametrosModal = {
148 titulo: 'Búsqueda de Sector',
149 query: '/sector',
150 columnas: [
151 {
152 nombre: 'Código',
153 propiedad: 'ID'
154 },
155 {
156 nombre: 'Nombre',
157 propiedad: 'NOMBRE'
158 }
159 ],
160 size: 'md'
161 };
162 focaModalService.modal(parametrosModal).then(
163 function(sector) {
164 $scope.params.sector = sector;
165 }, function() {}
166 );
167 }
168 };
169 $scope.volver = function() {
170 $scope.buscar = true;
171 };
172 $scope.cancel = function() {
173 $uibModalInstance.dismiss('Cancelar');
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 }
237
238
239 }
240 ]
241 );
242
src/js/controller-hoja-ruta.js
File was created 1 angular.module('focaModalInforme')
2 .controller('focaModalInformeHojaRutaController',
3 [
4 '$filter',
5 '$scope',
6 '$uibModalInstance',
7 'focaModalInformeHojaRutaService',
8 'i18nService',
9 'uiGridConstants',
10 function($filter, $scope, $uibModalInstance,
11 focaModalInformeHojaRutaService, i18nService, uiGridConstants
12 ) {
13 var fecha = new Date();
14 $scope.fechaHasta = new Date();
15 $scope.fechaDesde = new Date(fecha.setMonth(fecha.getMonth() - 1));
16 $scope.buscar = true;
17 $scope.informe = {};
18 i18nService.setCurrentLang('es');
19 $scope.gridOptions = {
20 enableHorizontalScrollbar: uiGridConstants.scrollbars.ALWAYS,
21 enableVerticalScrollbar: uiGridConstants.scrollbars.WHEN_NEEDED,
22 enableGridMenu: true,
23 exporterMenuCsv: false,
24 exporterPdfPageSize: 'A4',
25 exporterPdfFooter: function (currentPage, pageCount) {
26 return {
27 columns: [
28 {text: $filter('date')(new Date(), 'dd/MM/yyyy'),
29 margin: [40, 0]},
30 {text: currentPage + ' de ' + pageCount,
31 margin: [28, 0], alignment: 'right'}
32 ]
33 };
34 },
35
36 };
37 $scope.generarInforme = function() {
38 focaModalInformeHojaRutaService
39 .getHojasRuta(
40 $scope.fechaDesde.toISOString().split('.')[0],
41 $scope.fechaHasta.toISOString().split('.')[0]
42 )
43 .then(function(res) {
44 $scope.gridOptions.data = res.data.map(function(hojaRuta) {
45 return {
46 sucursal: hojaRuta.sucursal,
47 numero: hojaRuta.numeroHojaRuta,
48 transportista: hojaRuta.transportista.NOM,
49 unidad: hojaRuta.vehiculo.codigo,
50 chofer: hojaRuta.chofer.nombre,
51 fechaDeReparto: $filter('date')(hojaRuta.fechaReparto, 'dd/MM/yyyy')
52 };
53 });
54
55 //TODO: sacar id empresa hardcodeado
56 return focaModalInformeHojaRutaService.getEmpresa(1);
57 })
58 .then(function(res) {
59 var filenameStamp = 'Informe de correlatividad de hojas de ruta - ' +
60 $filter('date')(new Date(), 'dd/MM/yyyy');
61 $scope.informe.nombreEmpresa = res.data.NOM.trim();
62 $scope.informe.direccionEmpresa = res.data.DIR.trim();
63 $scope.gridOptions.exporterPdfFilename = filenameStamp + '.pdf';
64 $scope.gridOptions.exporterExcelFilename = filenameStamp + '.xlsx';
65 $scope.gridOptions.exporterPdfHeader = {
66 columns: [
67 {
68 text: $scope.informe.nombreEmpresa,
69 margin: [40, 0],
70 fontSize: 9
71 },
72 {
73 text: '\nInforme de correlatividad de hojas de ruta',
74 margin: [-170, -4, 0, 0],
75 fontSize: 12
76 },
77 {
78 text: [
79 '\n\nFiltros: ',
80 'Fecha desde: ',
81 $filter('date')($scope.fechaDesde, 'dd/MM/yyyy'),
82 ' Fecha hasta: ',
83 $filter('date')($scope.fechaHasta, 'dd/MM/yyyy')
84 ],
85 margin: [-380, 2, 0, 0],
86 fontSize: 9
87 },
88 {
89 text: $scope.informe.direccionEmpresa,
90 margin: [28, 0],
91 alignment: 'right',
92 fontSize: 9
93 }
94 ]
95 };
96 $scope.buscar = false;
97 });
98 };
99 $scope.volver = function() {
100 $scope.buscar = true;
101 };
102 $scope.cancel = function() {
103 $uibModalInstance.dismiss('Cancelar');
104 };
105 }
106 ]
107 );
108
src/js/controller-litros-km-unidad.js
File was created 1 angular.module('focaModalInforme')
2 .controller('focaModalInformeLitrosKmUnidadController',
3 [
4 '$filter',
5 '$scope',
6 '$uibModalInstance',
7 'focaModalInformeLitrosKmUnidadService',
8 'i18nService',
9 'focaModalService',
10 '$uibModal',
11 function($filter, $scope, $uibModalInstance, focaModalInformeLitrosKmUnidadService,
12 i18nService, focaModalService, $uibModal
13 ) {
14 var meses = ['ene', 'feb', 'mar', 'abr', 'may', 'jun',
15 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'];
16 var fecha = new Date();
17 $scope.generando = false;
18 $scope.fechaHasta = new Date();
19 $scope.fechaDesde = new Date(fecha.setMonth(fecha.getMonth() - 1));
20 $scope.buscar = true;
21 $scope.informe = {};
22 i18nService.setCurrentLang('es');
23 $scope.gridOptions = {
24 enableGridMenu: true,
25 exporterMenuCsv: false,
26 exporterPdfPageSize: 'A4',
27 exporterPdfFooter: function (currentPage, pageCount) {
28 return {
29 columns: [
30 {text: $filter('date')(new Date(), 'dd/MM/yyyy'),
31 margin: [40, 0]},
32 {text: currentPage + ' de ' + pageCount,
33 margin: [28, 0], alignment: 'right'}
34 ]
35 };
36 },
37 columnDefs: [
38 {
39 field: 'fecha',
40 enableSorting: false,
41 cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex) {
42 if (grid.getCellValue(row,col).indexOf('Sector:') !== -1)
43 return 'yellow w-100';
44 if (grid.getCellValue(row,col).indexOf('Producto:') !== -1)
45 return 'red w-100';
46 }
47 },
48 {
49 field: 'litrosRepartidos',
50 enableSorting: false,
51 cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex) {
52 if (!grid.getCellValue(row,col))
53 return 'd-none';
54 }
55 },
56 {
57 field: 'kmRecorridos',
58 enableSorting: false,
59 cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex) {
60 if (!grid.getCellValue(row,col))
61 return 'd-none';
62 }
63 },
64 {
65 field: 'lts/Km',
66 enableSorting: false,
67 cellClass: function(grid, row, col, rowRenderIndex, colRenderIndex) {
68 if (!grid.getCellValue(row,col))
69 return 'd-none';
70 }
71 }
72 ]
73
74 };
75 $scope.generarInforme = function() {
76 if(!$scope.unidad){
77 focaModalService.alert('Primero seleccione una unidad');
78 return;
79 }
80 $scope.generando = true;
81 focaModalInformeLitrosKmUnidadService
82 .getDescargas(
83 $scope.unidad.id,
84 $scope.fechaDesde.toISOString().split('.')[0],
85 $scope.fechaHasta.toISOString().split('.')[0]
86 )
87 .then(function(res) {
88 var result = [];
89 res.data.forEach(function(sector) {
90 result.push({
91 fecha: 'Sector: ' +
92 $filter('rellenarDigitos')(sector[0].articulo.CodSec, 2, '0') +
93 ' - ' + sector[0].articulo.sector.NOMBRE.trim()
94 });
95 sector.forEach(function(cisternaCarga) {
96 result.push({
97 fecha: 'Producto: ' +
98 cisternaCarga.articulo.CodArt +
99 ' - ' + cisternaCarga.articulo.DetArt
100 });
101 cisternaCarga.cisternaMovimientos.forEach(function(cisternaMovimiento) {
102 var lts = cisternaMovimiento.lts;
103 var kms = cisternaMovimiento.kms;
104
105 result.push({
106 fecha: meses[cisternaMovimiento.month] + ' - ' + cisternaMovimiento.year,
107 litrosRepartidos: $filter('number')(lts, 2),
108 kmRecorridos: $filter('number')(kms, 2),
109 'lts/Km': (kms) ? $filter('number')(lts / kms, 2) : lts
110 });
111 });
112 });
113 });
114 $scope.gridOptions.data = result;
115 $scope.generando = false;
116 $scope.buscar = false;
117 });
118 };
119 $scope.seleccionarTransportista = function() {
120 var parametrosModal = {
121 titulo: 'Búsqueda de Transportista',
122 query: '/transportista',
123 columnas: [
124 {
125 propiedad: 'COD',
126 nombre: 'Código',
127 filtro: {
128 nombre: 'rellenarDigitos',
129 parametro: 5
130 }
131 },
132 {
133 propiedad: 'NOM',
134 nombre: 'Nombre'
135 },
136 {
137 propiedad: 'CUIT',
138 nombre: 'CUIT'
139 }
140 ],
141 size: 'md'
142 };
143 return focaModalService.modal(parametrosModal)
144 };
145
146 $scope.seleccionarUnidad = function() {
147 $scope.seleccionarTransportista().then(
148 function(transportista) {
149 var parametrosModal = {
150 titulo: 'Búsqueda de vehículos',
151 query: '/vehiculo/transportista/' + transportista.COD,
152 columnas: [
153 {
154 propiedad: 'codigo',
155 nombre: 'Código'
156 },
157 {
158 propiedad: 'tractor',
159 nombre: 'Tractor'
160 },
161 {
162 propiedad: 'semi',
163 nombre: 'Semi'
164 },
165 {
166 propiedad: 'tractor',
167 nombre: 'Tractor'
168 }
169 ],
170 size: 'md'
171 };
172 focaModalService.modal(parametrosModal).then(
173 function(unidad) {
174 $scope.unidad = unidad;
175 }, function() {
176 $scope.seleccionarUnidad();
177 });
178 });
179 };
180 $scope.volver = function() {
181 $scope.buscar = true;
182 };
183 $scope.cancel = function() {
184 $uibModalInstance.dismiss('Cancelar');
185 };
186 }
187 ]
188 );
189
File was created 1 angular.module('focaModalInforme')
2 .factory('focaModalInformeChoferService', [
3 '$http',
4 'API_ENDPOINT',
5 function($http, API_ENDPOINT) {
6 return {
7 getDescargas: function(fechaDesde, fechaHasta) {
8 return $http.post(API_ENDPOINT.URL + '/informe/chofer',
9 {fechaDesde: fechaDesde, fechaHasta: fechaHasta});
10 },
11 getEmpresa: function(id) {
12 return $http.get(API_ENDPOINT.URL + '/empresa/' + id);
13 },
14 getDistanciaPorIdRemito: function(ids) {
15 return $http.post(API_ENDPOINT.URL + '/remito/distancia', {ids: ids});
16 }
17 };
18 }
19 ])
20 .factory('focaModalInformeGeneralUnidadService', [
21 '$http',
22 'API_ENDPOINT',
23 function($http, API_ENDPOINT) {
24 return {
25 getEmpresa: function(id) {
26 return $http.get(API_ENDPOINT.URL + '/empresa/' + id);
27 },
28 getInformeData: function(params) {
29 return $http.post(API_ENDPOINT.URL + '/informe/general-unidad-reparto', {params: params});
30 }
31 };
32 }
33 ])
34 .factory('focaModalInformeLitrosKmUnidadService', [
35 '$http',
36 'API_ENDPOINT',
37 function($http, API_ENDPOINT) {
38 return {
39 getDescargas: function(idVehiculo, fechaDesde, fechaHasta) {
40 return $http.post(API_ENDPOINT.URL + '/informe/litros-por-km',
41 {idVehiculo: idVehiculo, fechaDesde: fechaDesde, fechaHasta: fechaHasta});
42 },
43 getEmpresa: function(id) {
44 return $http.get(API_ENDPOINT.URL + '/empresa/' + id);
45 },
46 getDistanciaPorIdRemito: function(ids) {
47 return $http.post(API_ENDPOINT.URL + '/remito/distancia', {ids: ids});
48 }
49 };
50 }
51 ])
52 .factory('focaModalInformeHojaRutaService', [
53 '$http',
54 'API_ENDPOINT',
55 function($http, API_ENDPOINT) {
56 return {
57 getHojasRuta: function(fechaDesde, fechaHasta) {
58 return $http.get(API_ENDPOINT.URL + '/hoja-ruta/listar/' +
59 fechaDesde + '/' + fechaHasta);
60 },
61 getEmpresa: function(id) {
62 return $http.get(API_ENDPOINT.URL + '/empresa/' + id);
63 }
64 };
65 }
66 ]);
src/views/informe-chofer.html
File was created 1 <div class="modal-header py-1">
2 <div class="row w-100">
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>
5 <div class="col-12"><h5 class="modal-title">Informe de choferes</h5></div>
6 <div class="col-12" ng-hide="buscar">Filtros: Fecha desde: {{fechaDesde | date: 'dd/MM/yyyy'}} Fecha hasta: {{fechaHasta | date: 'dd/MM/yyyy'}}</div>
7 </div>
8 </div>
9 <div class="modal-body" id="modal-body">
10 <div class="input-group row"
11 ng-show="buscar">
12 <small class="col-md-2 col-4 text-left my-1">Fecha Desde</small>
13 <div class="col-md-4 col-8 input-group mb-2">
14 <div class="input-group-prepend">
15 <div class="input-group-text form-control-sm">
16 <i class="fa fa-calendar"></i>
17 </div>
18 </div>
19 <input
20 class="form-control form-control-sm"
21 id="inlineFormInputGroup"
22 type="text"
23 ng-model="fechaDesde"
24 ng-required="true"
25 uib-datepicker-popup="dd/MM/yyyy"
26 show-button-bar="false"
27 is-open="datepickerOpen"
28 on-open-focus="false"
29 ng-focus="datepickerOpen = true"
30 datepicker-options="dateOptions"
31 />
32 </div>
33 <small class="col-md-2 col-4 text-left my-1">Fecha Hasta</small>
34 <div class="col-md-4 col-8 input-group mb-2">
35 <div class="input-group-prepend">
36 <div class="input-group-text form-control-sm">
37 <i class="fa fa-calendar"></i>
38 </div>
39 </div>
40 <input
41 class="form-control form-control-sm"
42 id="inlineFormInputGroup"
43 type="text"
44 ng-model="fechaHasta"
45 ng-required="true"
46 uib-datepicker-popup="dd/MM/yyyy"
47 show-button-bar="false"
48 is-open="datepicker2Open"
49 on-open-focus="false"
50 ng-focus="datepicker2Open = true"
51 />
52 </div>
53 </div>
54 <div
55 ng-if="!buscar"
56 class="row">
57 <div class="col-12">
58 <div
59 class="gridInforme"
60 ui-grid="gridOptions"
61 ui-grid-exporter
62 ui-grid-resize-columns
63 ></div>
64 </div>
65 </div>
66 </div>
67 <div class="modal-footer py-1">
68 <button
69 class="btn btn-sm btn-secondary"
70 type="button"
71 ng-click="cancel()"
72 ng-show="buscar">Cancelar</button>
73 <button
74 ladda="generando"
75 class="btn btn-sm btn-secondary"
76 type="button"
77 ng-click="generarInforme()"
78 ng-show="buscar">Generar</button>
79 <button
80 class="btn btn-sm btn-secondary"
81 type="button"
82 ng-click="volver()"
83 ng-hide="buscar">Volver</button>
84 </div>
85
src/views/informe-general-unidad.html
File was created 1 <div class="modal-header py-1">
2 <div class="row w-100">
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>
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>
7 </div>
8 </div>
9 <div class="modal-body" id="modal-body">
10
11 <div class="input-group row"
12 ng-show="buscar">
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">
15 <div class="input-group-prepend">
16 <div class="input-group-text form-control-sm">
17 <i class="fa fa-calendar"></i>
18 </div>
19 </div>
20 <input
21 class="form-control form-control-sm"
22 id="inlineFormInputGroup"
23 type="text"
24 ng-model="params.fechaDesde"
25 ng-required="true"
26 uib-datepicker-popup="dd/MM/yyyy"
27 show-button-bar="false"
28 is-open="datepickerOpen"
29 on-open-focus="false"
30 ng-focus="datepickerOpen = true"
31 datepicker-options="dateOptions"
32 />
33 </div>
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">
36 <div class="input-group-prepend">
37 <div class="input-group-text form-control-sm">
38 <i class="fa fa-calendar"></i>
39 </div>
40 </div>
41 <input
42 class="form-control form-control-sm"
43 id="inlineFormInputGroup"
44 type="text"
45 ng-model="params.fechaHasta"
46 ng-required="true"
47 uib-datepicker-popup="dd/MM/yyyy"
48 show-button-bar="false"
49 is-open="datepicker2Open"
50 on-open-focus="false"
51 ng-focus="datepicker2Open = true"
52 />
53 </div>
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">
56 <input
57 class="form-control form-control-sm"
58 id="inlineFormInputGroup"
59 type="text"
60 ng-model="params.sector.NOMBRE"
61 ng-required="true"
62 ng-keypress="seleccionarSector($event.keyCode)"
63 />
64 <div class="input-group-append">
65 <div class="input-group-append" ng-hide="ingreso">
66 <button
67 ladda="searchLoading"
68 data-spinner-color="#FF0000"
69 class="btn btn-outline-secondary"
70 type="button"
71 ng-click="seleccionarSector(13)">
72 <i class="fa fa-search" aria-hidden="true"></i>
73 </button>
74 </div>
75 </div>
76 </div>
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">
79 <div class="custom-control custom-checkbox ml-auto">
80 <input
81 type="checkbox"
82 class="custom-control-input"
83 ng-model="params.diferenciarProductos"
84 id="customCheck1">
85 <label class="custom-control-label" for="customCheck1"></label>
86 </div>
87 </div>
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">
90 <div class="custom-control custom-checkbox ml-auto">
91 <input
92 type="checkbox"
93 class="custom-control-input"
94 ng-model="params.diferenciarMeses"
95 id="customCheck2">
96 <label class="custom-control-label" for="customCheck2"></label>
97 </div>
98 </div>
99 </div>
100 <div
101 ng-if="!buscar"
102 class="row">
103 <div class="col-12">
104 <div
105 class="gridInforme"
106 ui-grid="gridOptions"
107 ui-grid-exporter
108 ui-grid-resize-columns
109 ></div>
110 </div>
111 </div>
112 </div>
113 <div class="modal-footer py-1">
114 <button
115 class="btn btn-sm btn-secondary"
116 type="button"
117 ng-click="cancel()"
118 ng-show="buscar">Cancelar</button>
119 <button
120 ladda="generando"
121 class="btn btn-sm btn-secondary"
122 type="button"
123 ng-click="generarInforme()"
124 ng-show="buscar">Generar</button>
125 <button
126 class="btn btn-sm btn-secondary"
127 type="button"
128 ng-click="volver()"
129 ng-hide="buscar">Volver</button>
130 </div>
131
src/views/informe-hoja-ruta.html
File was created 1 <div class="modal-header py-1">
2 <div class="row w-100">
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>
5 <div class="col-12"><h5 class="modal-title">Informe de correlatividad de hojas de ruta</h5></div>
6 <div class="col-12" ng-hide="buscar">Filtros: Fecha desde: {{fechaDesde | date: 'dd/MM/yyyy'}} Fecha hasta: {{fechaHasta | date: 'dd/MM/yyyy'}}</div>
7 </div>
8 </div>
9 <div class="modal-body" id="modal-body">
10
11 <div class="input-group row"
12 ng-show="buscar">
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">
15 <div class="input-group-prepend">
16 <div class="input-group-text form-control-sm">
17 <i class="fa fa-calendar"></i>
18 </div>
19 </div>
20 <input
21 class="form-control form-control-sm"
22 id="inlineFormInputGroup"
23 ladda="searchLoading"
24 type="text"
25 ng-model="fechaDesde"
26 ng-required="true"
27 uib-datepicker-popup="dd/MM/yyyy"
28 show-button-bar="false"
29 is-open="datepickerOpen"
30 on-open-focus="false"
31 ng-focus="datepickerOpen = true"
32 datepicker-options="dateOptions"
33 />
34 </div>
35 <small class="col-md-2 col-4 text-left my-1">Fecha Hasta</small>
36 <div class="col-md-4 col-8 input-group mb-2">
37 <div class="input-group-prepend">
38 <div class="input-group-text form-control-sm">
39 <i class="fa fa-calendar"></i>
40 </div>
41 </div>
42 <input
43 class="form-control form-control-sm"
44 id="inlineFormInputGroup"
45 ladda="searchLoading"
46 type="text"
47 ng-model="fechaHasta"
48 ng-required="true"
49 uib-datepicker-popup="dd/MM/yyyy"
50 show-button-bar="false"
51 is-open="datepicker2Open"
52 on-open-focus="false"
53 ng-focus="datepicker2Open = true"
54 />
55 </div>
56 </div>
57 <div
58 ng-if="!buscar"
59 class="row">
60 <div class="col-12">
61 <div
62 class="gridInforme"
63 ui-grid="gridOptions"
64 ui-grid-exporter
65 ui-grid-resize-columns
66 ></div>
67 </div>
68 </div>
69 </div>
70 <div class="modal-footer py-1">
71 <button
72 class="btn btn-sm btn-secondary"
73 type="button"
74 ng-click="cancel()"
75 ng-show="buscar">Cancelar</button>
76 <button
77 class="btn btn-sm btn-secondary"
78 type="button"
79 ng-click="generarInforme()"
80 ng-show="buscar">Generar</button>
81 <button
82 class="btn btn-sm btn-secondary"
83 type="button"
84 ng-click="volver()"
85 ng-hide="buscar">Volver</button>
86 </div>
87
src/views/informe-litros-km-unidad.html
File was created 1 <div class="modal-header py-1">
2 <div class="row w-100">
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>
5 <div class="col-12"><h5 class="modal-title">Informe de litros por km recorrido por unidad de reparto</h5></div>
6 <div class="col-12" ng-hide="buscar">Filtros: Fecha desde: {{fechaDesde | date: 'dd/MM/yyyy'}} Fecha hasta: {{fechaHasta | date: 'dd/MM/yyyy'}}</div>
7 </div>
8 </div>
9 <div class="modal-body" id="modal-body">
10 <div class="input-group row"
11 ng-show="buscar">
12 <small class="col-md-2 col-4 text-left my-1">Fecha Desde</small>
13 <div class="col-md-4 col-8 input-group mb-2">
14 <div class="input-group-prepend">
15 <div class="input-group-text form-control-sm">
16 <i class="fa fa-calendar"></i>
17 </div>
18 </div>
19 <input
20 class="form-control form-control-sm"
21 id="inlineFormInputGroup"
22 type="text"
23 ng-model="fechaDesde"
24 ng-required="true"
25 uib-datepicker-popup="dd/MM/yyyy"
26 show-button-bar="false"
27 is-open="datepickerOpen"
28 on-open-focus="false"
29 ng-focus="datepickerOpen = true"
30 datepicker-options="dateOptions"
31 />
32 </div>
33 <small class="col-md-2 col-4 text-left my-1">Fecha Hasta</small>
34 <div class="col-md-4 col-8 input-group mb-2">
35 <div class="input-group-prepend">
36 <div class="input-group-text form-control-sm">
37 <i class="fa fa-calendar"></i>
38 </div>
39 </div>
40 <input
41 class="form-control form-control-sm"
42 id="inlineFormInputGroup"
43 type="text"
44 ng-model="fechaHasta"
45 ng-required="true"
46 uib-datepicker-popup="dd/MM/yyyy"
47 show-button-bar="false"
48 is-open="datepicker2Open"
49 on-open-focus="false"
50 ng-focus="datepicker2Open = true"
51 />
52 </div>
53 <small class="col-md-2 col-4 text-left my-1">Unidad</small>
54 <div class="col-md-4 col-8 input-group mb-2">
55 <input
56 class="form-control form-control-sm"
57 id="inlineFormInputGroup"
58 type="text"
59 ng-model="unidad.codigo"
60 ng-required="true"
61 ng-keypress="seleccionarUnidad($event.keyCode)"
62 />
63 <div class="input-group-append">
64 <div class="input-group-append" ng-hide="ingreso">
65 <button
66 ladda="searchLoading"
67 data-spinner-color="#FF0000"
68 class="btn btn-outline-secondary"
69 type="button"
70 ng-click="seleccionarUnidad(13)">
71 <i class="fa fa-search" aria-hidden="true"></i>
72 </button>
73 </div>
74 </div>
75 </div>
76 </div>
77 <div
78 ng-if="!buscar"
79 class="row">
80 <div class="col-12">
81 <div
82 class="gridInforme"
83 ui-grid="gridOptions"
84 ui-grid-exporter
85 ui-grid-resize-columns
86 ></div>
87 </div>
88 </div>
89 </div>
90 <div class="modal-footer py-1">
91 <button
92 class="btn btn-sm btn-secondary"
93 type="button"
94 ng-click="cancel()"
95 ng-show="buscar">Cancelar</button>
96 <button
97 ladda="generando"
98 class="btn btn-sm btn-secondary"
99 type="button"
100 ng-click="generarInforme()"
101 ng-show="buscar">Generar</button>
102 <button
103 class="btn btn-sm btn-secondary"
104 type="button"
105 ng-click="volver()"
106 ng-hide="buscar">Volver</button>
107 </div>
108