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
... ... @@ -0,0 +1,6 @@
  1 +/node_modules
  2 +/dist
  3 +/tmp
  4 +package-lock\.json
  5 +
  6 +src/etc/develop\.js
... ... @@ -0,0 +1,64 @@
  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 +}
... ... @@ -0,0 +1,94 @@
  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 +});
... ... @@ -0,0 +1,62 @@
  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 +}
src/etc/develop.js.ejemplo
... ... @@ -0,0 +1,4 @@
  1 +angular.module('focaModalInforme')
  2 + .constant("API_ENDPOINT", {
  3 + 'URL': '//127.0.0.1:9000'
  4 + });
... ... @@ -0,0 +1 @@
  1 +angular.module('focaModalInforme', []);
src/js/controller-chofer.js
... ... @@ -0,0 +1,151 @@
  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 + );
src/js/controller-general-unidad.js
... ... @@ -0,0 +1,241 @@
  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 + );
src/js/controller-hoja-ruta.js
... ... @@ -0,0 +1,107 @@
  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 + );
src/js/controller-litros-km-unidad.js
... ... @@ -0,0 +1,188 @@
  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 + );
... ... @@ -0,0 +1,66 @@
  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 + ]);
0 67 \ No newline at end of file
src/views/informe-chofer.html
... ... @@ -0,0 +1,84 @@
  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>
src/views/informe-general-unidad.html
... ... @@ -0,0 +1,130 @@
  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>
src/views/informe-hoja-ruta.html
... ... @@ -0,0 +1,86 @@
  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>
src/views/informe-litros-km-unidad.html
... ... @@ -0,0 +1,107 @@
  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>