Commit 9ba5c967b754f74f3c7a82ac8428edfaa1b66c00
1 parent
960bd05b6b
Exists in
master
logistica de pedidos
Showing
7 changed files
with
242 additions
and
293 deletions
Show diff stats
src/js/arrastrar.js
| File was created | 1 | function allowDrop(ev) { | |
| 2 | ev.preventDefault(); | ||
| 3 | } | ||
| 4 | function drag(ev, marcador) { | ||
| 5 | marcador = JSON.stringify(marcador); | ||
| 6 | ev.dataTransfer.setData('marcador', marcador); | ||
| 7 | var elementoDom = document.getElementById('test'); | ||
| 8 | var scope = angular.element(elementoDom).scope(); | ||
| 9 | scope.arrastra(); | ||
| 10 | } | ||
| 11 | function drop(ev) { | ||
| 12 | ev.preventDefault(); | ||
| 13 | var data = ev.dataTransfer.getData('marcador'); | ||
| 14 | var elementoDom = document.getElementById(ev.target.id); | ||
| 15 | var elementoAngular = angular.element(elementoDom); | ||
| 16 | var elementoScope = elementoAngular.scope(); | ||
| 17 | elementoScope.cargar(ev.target.id, data); | ||
| 18 | elementoScope.$digest(); | ||
| 19 | } | ||
| 20 | function dropEnd() { | ||
| 21 | console.log('drop'); | ||
| 22 | var elementoDom = document.getElementById('test'); | ||
| 23 | var scope = angular.element(elementoDom).scope(); | ||
| 1 |
|
||
| 24 | scope.noArrastra(); | ||
| 25 | } |
src/js/controller.js
| 1 | angular.module('focaLogisticaPedidoRuta') .controller('focaLogisticaPedidoRutaController', [ | 1 | angular.module('focaLogisticaPedidoRuta') .controller('focaLogisticaPedidoRutaController', [ |
| 2 | '$scope', 'focaLogisticaPedidoRutaService', '$location', '$uibModal', '$filter', | 2 | '$scope', 'focaLogisticaPedidoRutaService', '$location', '$uibModal', '$filter', |
| 3 | function($scope, focaLogisticaPedidoRutaService, $location, $uibModal, $filter) { | 3 | 'focaModalService', 'focaBotoneraLateralService', |
| 4 | $scope.actividad = ''; | 4 | function($scope, focaLogisticaPedidoRutaService, $location, $uibModal, $filter, |
| 5 | 5 | focaModalService, focaBotoneraLateralService | |
| 6 | ) { | ||
| 6 | $scope.now = new Date(); | 7 | $scope.now = new Date(); |
| 7 | $scope.actividad = 'Nota de pedido'; | 8 | $scope.actividad = 'Logistica'; |
| 9 | |||
| 10 | //Datos Pantalla | ||
| 11 | $scope.titulo = 'Logistica de Pedidos'; | ||
| 12 | $scope.botonera = ['Vehiculo']; | ||
| 13 | var cabecera = ''; | ||
| 14 | |||
| 8 | $scope.idUsuario = 0; | 15 | $scope.idUsuario = 0; |
| 9 | $scope.marcadores = []; | 16 | $scope.marcadores = []; |
| 10 | $scope.vehiculos = []; | 17 | $scope.vehiculos = []; |
| 11 | getSeguimiento(); | 18 | getSeguimiento(); |
| 12 | $scope.arrastrando = false; | 19 | $scope.arrastrando = false; |
| 13 | $scope.general = function() { | 20 | $scope.general = function() { |
| 14 | $scope.idUsuario = 0; | 21 | $scope.idUsuario = 0; |
| 15 | getSeguimiento(); | 22 | getSeguimiento(); |
| 16 | }; | 23 | }; |
| 17 | 24 | ||
| 25 | //SETEO BOTONERA LATERAL | ||
| 26 | focaBotoneraLateralService.showSalir(true); | ||
| 27 | focaBotoneraLateralService.showPausar(false); | ||
| 28 | focaBotoneraLateralService.showGuardar(false); | ||
| 29 | |||
| 30 | $scope.general = function() { | ||
| 31 | $scope.idUsuario = 0; | ||
| 32 | getSeguimiento(); | ||
| 33 | $scope.$broadcast('removeCabecera', cabecera); | ||
| 34 | $scope.$broadcast('addCabecera',{ | ||
| 35 | label: 'General', | ||
| 36 | valor: '' | ||
| 37 | }); | ||
| 38 | }; | ||
| 39 | |||
| 18 | $scope.cargar = function(id, punto) { | 40 | $scope.cargar = function(id, punto) { |
| 19 | var marcador = JSON.parse(punto); | 41 | var idRemito = JSON.parse(punto).notaPedido.remito.id; |
| 20 | var vehiculo = $filter('filter')($scope.vehiculos, {id: parseInt(id)})[0]; | ||
| 21 | var modalInstance = $uibModal.open( | 42 | var modalInstance = $uibModal.open( |
| 22 | { | 43 | { |
| 23 | ariaLabelledBy: 'Busqueda de Vehiculo', | 44 | ariaLabelledBy: 'Busqueda de Vehiculo', |
| 24 | templateUrl: 'foca-detalle-vehiculo.html', | 45 | templateUrl: 'foca-detalle-vehiculo.html', |
| 25 | controller: 'focaDetalleVehiculo', | 46 | controller: 'focaDetalleVehiculo', |
| 26 | size: 'lg', | 47 | size: 'lg', |
| 27 | resolve: { | 48 | resolve: { |
| 28 | vehiculo: function() {return vehiculo;}, | 49 | idVehiculo: function() {return id;}, |
| 29 | marcador: function() {return marcador;} | 50 | idRemito: function() {return idRemito;} |
| 30 | } | 51 | } |
| 31 | } | 52 | } |
| 32 | ); | 53 | ); |
| 33 | modalInstance.result.then(function() { | 54 | modalInstance.result.then(function() { |
| 34 | }, function() { | 55 | }, function() { |
| 35 | //run when cancel modal | ||
| 36 | }); | 56 | }); |
| 37 | }; | 57 | }; |
| 38 | 58 | ||
| 39 | $scope.arrastra = function() { | 59 | $scope.quitarVehiculo = function(vehiculo) { |
| 60 | focaModalService.confirm('Esta seguro que desea eliminar el vehículo ' + | ||
| 61 | vehiculo.codigo + '?').then(function() { | ||
| 62 | $scope.vehiculos.splice($scope.vehiculos.indexOf(vehiculo), 1); | ||
| 63 | }); | ||
| 64 | }; | ||
| 65 | |||
| 66 | $scope.informacionVehiculo = function(vehiculo) { | ||
| 67 | focaModalService.alert('EN DESARROLLO : \n información del vehículo ' + | ||
| 68 | JSON.stringify(vehiculo)); | ||
| 69 | }; | ||
| 70 | |||
| 71 | $scope.arrastra = function() { | ||
| 40 | $scope.arrastrando = true; | 72 | $scope.arrastrando = true; |
| 41 | $scope.$digest(); | 73 | $scope.$digest(); |
| 42 | }; | 74 | }; |
| 43 | 75 | ||
| 44 | $scope.noArrastra = function() { | 76 | $scope.noArrastra = function() { |
| 45 | $scope.arrastrando = false; | 77 | $scope.arrastrando = false; |
| 46 | $scope.$digest(); | 78 | $scope.$digest(); |
| 47 | }; | 79 | }; |
| 48 | 80 | ||
| 49 | $scope.individual = function() { | 81 | $scope.individual = function() { |
| 50 | $scope.idUsuario = -1; | 82 | $scope.idUsuario = -1; |
| 51 | }; | 83 | }; |
| 52 | 84 | ||
| 53 | $scope.mostrarDetalle = function() { | 85 | $scope.mostrarDetalle = function() { |
| 54 | $scope.detalle = true; | 86 | $scope.detalle = true; |
| 55 | }; | 87 | }; |
| 56 | 88 | ||
| 57 | $scope.salir = function() { | 89 | $scope.salir = function() { |
| 58 | $location.path('/'); | 90 | $location.path('/'); |
| 59 | }; | 91 | }; |
| 60 | 92 | ||
| 61 | $scope.search = function(key) { | 93 | $scope.search = function(key) { |
| 62 | if (key === 13) { | 94 | if (key === 13) { |
| 63 | $scope.idUsuario = $scope.idUsuarioInput; | 95 | $scope.idUsuario = $scope.idUsuarioInput; |
| 64 | getSeguimiento(); | 96 | getSeguimiento(); |
| 97 | $scope.$broadcast('removeCabecera', 'General'); | ||
| 98 | $scope.$broadcast('addCabecera', { | ||
| 99 | label: cabecera, | ||
| 100 | valor: $scope.idUsuarioInput | ||
| 101 | }); | ||
| 65 | } | 102 | } |
| 66 | }; | 103 | }; |
| 67 | 104 | ||
| 68 | $scope.fecha = function() { | 105 | $scope.fecha = function() { |
| 69 | getSeguimiento(); | 106 | getSeguimiento(); |
| 70 | }; | 107 | }; |
| 71 | 108 | ||
| 72 | $scope.seleccionarVehiculo = function() { | 109 | $scope.seleccionarVehiculo = function() { |
| 73 | var modalInstance = $uibModal.open( | 110 | var modalInstance = $uibModal.open( |
| 74 | { | 111 | { |
| 75 | ariaLabelledBy: 'Busqueda de Vehiculo', | 112 | ariaLabelledBy: 'Busqueda de Vehiculo', |
| 76 | templateUrl: 'modal-vehiculo.html', | 113 | templateUrl: 'modal-vehiculo.html', |
| 77 | controller: 'focaModalVehiculoController', | 114 | controller: 'focaModalVehiculoController', |
| 78 | size: 'lg' | 115 | size: 'lg' |
| 79 | } | 116 | } |
| 80 | ); | 117 | ); |
| 81 | 118 | ||
| 82 | modalInstance.result.then( | 119 | modalInstance.result.then( |
| 83 | function(vehiculo) { | 120 | function(vehiculo) { |
| 121 | var existe = $filter('filter')($scope.vehiculos, {id: vehiculo.id}); | ||
| 122 | if(existe.length > 0){ | ||
| 1 |
|
||
| 123 | focaModalService.alert('El vehiculo que intenta cargar ya ha sido cargado'); | ||
| 124 | return; | ||
| 125 | } | ||
| 84 | $scope.vehiculos.push(vehiculo); | 126 | $scope.vehiculos.push(vehiculo); |
| 85 | }, function() { | 127 | }, function() { |
| 86 | // funcion ejecutada cuando se cancela el modal | 128 | // funcion ejecutada cuando se cancela el modal |
| 87 | } | 129 | } |
| 88 | ); | 130 | ); |
| 89 | }; | 131 | }; |
| 90 | |||
| 91 | |||
| 92 | 132 | ||
| 93 | function getSeguimiento() { | 133 | function getSeguimiento() { |
| 94 | var now = $scope.now; | 134 | var now = $scope.now; |
| 95 | var desde = new Date(new Date(now.setHours(0)).setMinutes(0)); | 135 | var desde = new Date(new Date(now.setHours(0)).setMinutes(0)); |
| 96 | desde = desde.setDate(desde.getDate() - 1); | 136 | desde = desde.setDate(desde.getDate() - 1); |
| 97 | desde = new Date(desde); | 137 | desde = new Date(desde); |
| 98 | var datos = { | 138 | var datos = { |
| 99 | actividad: $scope.actividad, | 139 | actividad: $scope.actividad, |
| 100 | idUsuario: $scope.idUsuario, | 140 | idUsuario: $scope.idUsuario, |
| 101 | fechaDesde: desde, | 141 | fechaDesde: desde, |
| 102 | fechaHasta: new Date(new Date(now.setHours(23)).setMinutes(59)) | 142 | fechaHasta: new Date(new Date(now.setHours(23)).setMinutes(59)) |
| 103 | }; | 143 | }; |
| 104 | 144 | ||
| 105 | $scope.datosBuscados = { | 145 | $scope.datosBuscados = { |
| 106 | actividad: $scope.actividad, | 146 | actividad: $scope.actividad, |
| 107 | individual: $scope.idUsuario !== 0 ? true : false | 147 | individual: $scope.idUsuario !== 0 ? true : false |
| 108 | }; | 148 | }; |
| 109 | 149 | ||
| 110 | focaLogisticaPedidoRutaService.obtenerActividad(datos).then(function(datos) { | 150 | focaLogisticaPedidoRutaService.obtenerActividad(datos).then(function(datos) { |
| 111 | |||
| 112 | $scope.marcadores = datos.data; | 151 | $scope.marcadores = datos.data; |
src/js/controllerDetalleVehiculo.js
| 1 | angular.module('focaLogisticaPedidoRuta') | 1 | angular.module('focaLogisticaPedidoRuta') |
| 2 | .controller('focaDetalleVehiculo', | 2 | .controller('focaDetalleVehiculo', |
| 3 | ['$scope', | 3 | ['$scope', |
| 4 | '$uibModalInstance', | 4 | '$uibModalInstance', |
| 5 | 'vehiculo', | 5 | 'idVehiculo', |
| 6 | 'marcador', | 6 | 'idRemito', |
| 7 | function($scope, $uibModalInstance, vehiculo, marcador) { | 7 | 'focaModalService', |
| 8 | $scope.articulos = marcador.notaPedido.articulosNotaPedido; | 8 | '$filter', |
| 9 | $scope.articuloSeleccionado = {}; | 9 | 'focaLogisticaPedidoRutaService', |
| 10 | $scope.vehiculo = vehiculo; | 10 | function($scope, $uibModalInstance, idVehiculo, idRemito, focaModalService, $filter, |
| 11 | focaLogisticaPedidoRutaService | ||
| 12 | ) { | ||
| 13 | $scope.articulos = []; | ||
| 14 | $scope.vehiculo = {}; | ||
| 15 | $scope.remito = {}; | ||
| 16 | focaLogisticaPedidoRutaService.obtenerVehiculoById(idVehiculo).then( | ||
| 17 | function(res) { | ||
| 18 | $scope.vehiculo = res.data; | ||
| 19 | } | ||
| 20 | ); | ||
| 21 | focaLogisticaPedidoRutaService.obtenerRemitoById(idRemito).then( | ||
| 22 | function(res) { | ||
| 23 | $scope.remito = res.data; | ||
| 24 | $scope.articulos = res.data.articulosRemito; | ||
| 25 | } | ||
| 26 | ); | ||
| 27 | $scope.aCargar = []; | ||
| 11 | $scope.aceptar = function() { | 28 | $scope.aceptar = function() { |
| 12 | $uibModalInstance.close(); | 29 | $uibModalInstance.close(); |
| 13 | }; | 30 | }; |
| 14 | 31 | ||
| 15 | $scope.cargarACisterna = function(cisterna) { | 32 | $scope.cancelar = function() { |
| 16 | if(!$scope.articuloSeleccionado.id) { | 33 | $uibModalInstance.close(); |
| 17 | //TODO: usar modal de foca | 34 | }; |
| 18 | alert('Debe seleccionar un articulo'); | 35 | |
| 19 | return; | 36 | $scope.cargarACisternas = function(vehiculo) { |
| 20 | } | 37 | for (var i = 0; i < vehiculo.cisternas.length; i++) { |
| 1 |
|
||
| 21 | if(cisterna.cisternaCarga.cantidad) { | 38 | var cisterna = vehiculo.cisternas[i]; |
| 22 | cisterna.cisternaCarga.cantidad += parseFloat(cisterna.aCargar); | 39 | var aCargar = parseFloat($scope.aCargar[i]); |
| 23 | }else { | 40 | if(!aCargar) { |
| 24 | cisterna.cisternaCarga.cantidad = parseFloat(cisterna.aCargar); | 41 | continue; |
| 25 | cisterna.cisternaCarga.idProducto = $scope.articuloSeleccionado.id; | 42 | } |
| 26 | } | 43 | if(aCargar > cisterna.disponible) { |
| 27 | cisterna.disponible = cisterna.capacidad - cisterna.cisternaCarga.cantidad; | 44 | focaModalService.alert('La cantidad cargada supera la capacidad de la' + |
| 28 | cisterna.aCargar = ''; | 45 | 'cisterna ' + cisterna.codigo); |
| 46 | return; | ||
| 47 | } | ||
| 48 | if(cisterna.cisternaCarga.cantidad) { | ||
| 49 | cisterna.cisternaCarga.cantidad += aCargar; | ||
| 50 | }else { | ||
| 51 | cisterna.cisternaCarga.cantidad = aCargar; | ||
| 52 | cisterna.cisternaCarga.idProducto = $scope.articuloSeleccionado.idArticulo; | ||
| 53 | } | ||
| 54 | cisterna.disponible = cisterna.capacidad - cisterna.cisternaCarga.cantidad; | ||
| 55 | |||
| 56 | cisterna.cisternaCarga.articulo = { | ||
| 57 | DetArt: $scope.articuloSeleccionado.descripcion | ||
| 58 | }; | ||
| 59 | $filter('filter')($scope.articulos, {id: $scope.articuloSeleccionado.id})[0] | ||
| 60 | .cargado = true; | ||
| 61 | |||
| 62 | $scope.calcularPorcentaje(cisterna); | ||
| 63 | } | ||
| 64 | var articuloSiguiente = $scope.articulos.filter( | ||
| 65 | function(filter) { | ||
| 66 | return filter.cargado !== true; | ||
| 67 | } | ||
| 68 | ); | ||
| 69 | if(articuloSiguiente.length > 0){ | ||
| 1 |
|
||
| 70 | $scope.cambioArticulo(articuloSiguiente[0]); | ||
| 71 | } | ||
| 72 | $scope.aCargar = []; | ||
| 29 | }; | 73 | }; |
| 30 | $scope.calcularPorcentaje = function(cisterna) { | 74 | $scope.calcularPorcentaje = function(cisterna) { |
| 31 | if(!cisterna.cisternaCarga.cantidad) { | 75 | if(!cisterna.cisternaCarga.cantidad) { |
| 32 | cisterna.cisternaCarga.cantidad = 0; | 76 | cisterna.cisternaCarga.cantidad = 0; |
| 33 | } | 77 | } |
| 34 | var porcentaje = (cisterna.cisternaCarga.cantidad * 100 / | 78 | var porcentaje = (cisterna.cisternaCarga.cantidad * 100 / |
| 35 | cisterna.capacidad) + '%'; | 79 | cisterna.capacidad) + '%'; |
| 36 | document.getElementById(cisterna.id).style.width = porcentaje; | 80 | var elementHtml = document.getElementById(cisterna.id); |
| 81 | if(elementHtml) { | ||
| 82 | elementHtml.style.width = porcentaje; | ||
| 83 | } | ||
| 37 | }; | 84 | }; |
| 38 | $scope.cambioArticulo = function(articulo) { | 85 | $scope.cambioArticulo = function(articulo) { |
| 86 | articulo.checked = true; | ||
| 39 | $scope.articuloSeleccionado = articulo; | 87 | $scope.articuloSeleccionado = articulo; |
| 40 | }; | 88 | }; |
| 89 | $scope.actualizarArticulo = function () { | ||
| 90 | $scope.articuloSeleccionado.cantidadCargada = 0; | ||
| 91 | for (var i = 0; i < $scope.aCargar.length; i++) { | ||
| 92 | $scope.articuloSeleccionado.cantidadCargada += | ||
| 93 | parseFloat($scope.aCargar[i]) || 0; | ||
| 94 | } | ||
| 95 | }; | ||
| 96 | $scope.tieneArticulosPendientes = function() { | ||
| 97 | var articulosDescargados = $scope.articulos.filter(function(filter) { | ||
| 98 | return filter.cargado === true; | ||
| 99 | }); | ||
| 100 | if(articulosDescargados.length === $scope.articulos.length) { | ||
| 101 | return false; | ||
| 102 | } | ||
| 103 | return true; | ||
| 104 | }; | ||
| 41 | }]); | 105 | }]); |
| 42 | 106 |
src/js/osm-directive.js
| 1 | angular.module('focaLogisticaPedidoRuta').directive('foca', function() { | 1 | angular.module('focaLogisticaPedidoRuta').directive('foca', function() { |
| 2 | return { | 2 | return { |
| 3 | restrict: 'E', | 3 | restrict: 'E', |
| 4 | link: function(scope, el, attrs) { | 4 | link: function(scope, el, attrs) { |
| 5 | var contenedor = document.createElement('div'); | 5 | var contenedor = document.createElement('div'); |
| 6 | el.append(contenedor); | 6 | el.append(contenedor); |
| 7 | scope.map = L.map(contenedor).setView([attrs.latitud, attrs.longitud], attrs.zoom); | 7 | scope.map = L.map(contenedor).setView([attrs.latitud, attrs.longitud], attrs.zoom); |
| 8 | L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(scope.map); | 8 | L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(scope.map); |
| 9 | }, | 9 | }, |
| 10 | controller: ['$scope', '$filter', function($scope, $filter) { | 10 | controller: ['$scope', '$filter', function($scope, $filter) { |
| 11 | $scope.markers = []; | 11 | $scope.markers = []; |
| 12 | $scope.$watch('marcadores', function() { | 12 | $scope.$watch('marcadores', function() { |
| 13 | for(var i in $scope.markers) { | 13 | for(var i in $scope.markers) { |
| 14 | $scope.map.removeLayer($scope.markers[i]); | 14 | $scope.map.removeLayer($scope.markers[i]); |
| 15 | } | 15 | } |
| 16 | $scope.markers = []; | 16 | $scope.markers = []; |
| 17 | 17 | ||
| 18 | angular.forEach($scope.marcadores, function(marcador) { | 18 | angular.forEach($scope.marcadores, function(marcador) { |
| 19 | var observacion = | 19 | var observacion = |
| 20 | 'Vendedor: ' + marcador.notaPedido.idVendedor + ' - ' + | 20 | 'Vendedor: ' + marcador.notaPedido.idVendedor + ' - ' + |
| 21 | ( | 21 | ( |
| 22 | marcador.notaPedido.vendedor ? | 22 | marcador.notaPedido.vendedor ? |
| 23 | marcador.notaPedido.vendedor.NomVen : | 23 | marcador.notaPedido.vendedor.NomVen : |
| 24 | '' | 24 | '' |
| 25 | ) + '<br/>'; | 25 | ) + '<br/>'; |
| 26 | observacion += 'Fecha: ' + | 26 | observacion += 'Fecha: ' + |
| 27 | $filter('date')(marcador.fecha.slice(0,10), 'dd/MM/yyyy') + ' ' + | 27 | $filter('date')(marcador.fecha.slice(0,10), 'dd/MM/yyyy') + ' ' + |
| 28 | marcador.fecha.slice(11,19) + '<br/>'; | 28 | marcador.fecha.slice(11,19) + '<br/>'; |
| 29 | observacion += 'Nº: ' + $filter('comprobante')([ | 29 | observacion += 'Nº: ' + $filter('comprobante')([ |
| 30 | marcador.notaPedido.sucursal, | 30 | marcador.notaPedido.sucursal, |
| 31 | marcador.notaPedido.numeroNotaPedido | 31 | marcador.notaPedido.numeroNotaPedido |
| 32 | ]) + '<br/>'; | 32 | ]) + '<br/>'; |
| 33 | observacion += 'Cliente: ' + | 33 | observacion += 'Cliente: ' + |
| 34 | marcador.notaPedido.cliente.NOM + '<br/>'; | 34 | marcador.notaPedido.cliente.NOM + '<br/>'; |
| 35 | 35 | ||
| 36 | if($scope.parametros.individual) { | 36 | if($scope.parametros.individual) { |
| 37 | observacion += | 37 | observacion += |
| 38 | 'Total: ' + $filter('currency')(marcador.notaPedido.total, '$'); | 38 | 'Total: ' + $filter('currency')(marcador.notaPedido.total, '$'); |
| 39 | observacion = 'Orden: ' + marcador.orden + '<br/>' + observacion; | 39 | observacion = 'Orden: ' + marcador.orden + '<br/>' + observacion; |
| 40 | 40 | ||
| 41 | if(marcador.distancia) { | 41 | if(marcador.distancia) { |
| 42 | observacion += '<br/>Distancia a casa central: ' + | 42 | observacion += '<br/>Distancia a casa central: ' + |
| 43 | marcador.distancia + 'km'; | 43 | marcador.distancia + 'km'; |
| 44 | } | 44 | } |
| 45 | }else { | 45 | }else { |
| 46 | observacion += 'Cantidad de nota de pedido: ' + | 46 | observacion += 'Cantidad de nota de pedido: ' + |
| 47 | marcador.cantidad + '<br/>'; | 47 | marcador.cantidad + '<br/>'; |
| 48 | observacion += 'Total Vendido: ' + | 48 | observacion += 'Total Vendido: ' + |
| 49 | $filter('currency')(marcador.total, '$'); | 49 | $filter('currency')(marcador.total, '$'); |
| 50 | } | 50 | } |
| 51 | observacion += '<br/>'; | 51 | observacion += '<br/>'; |
| 52 | observacion += '<i class="fa fa-map-marker fa-3x" aria-hidden="true"'+ | 52 | observacion += '<i class="fa fa-map-marker fa-3x" aria-hidden="true"'+ |
| 53 | 'class="form-control" ondragend="dropEnd()" ondragstart=\'drag(event, '+ | 53 | 'class="form-control" ondragend="dropEnd()" ondragstart=\'drag(event, '+ |
| 54 | JSON.stringify(marcador)+')\' draggable="true"></i>'; | 54 | JSON.stringify(marcador)+')\' draggable="true"></i>(Arrastrar icono)'; |
| 55 | $scope.markers.push( | 55 | $scope.markers.push( |
| 56 | L.marker([marcador.latitud, marcador.longitud]).addTo($scope.map) | 56 | L.marker([marcador.latitud, marcador.longitud]).addTo($scope.map) |
| 57 | .bindPopup(observacion) | 57 | .bindPopup(observacion) |
| 58 | ); | 58 | ); |
| 59 | 59 | ||
| 60 | $scope.markers[0].openPopup(); | 60 | $scope.markers[0].openPopup(); |
| 61 | }); | 61 | }); |
| 62 | }); | 62 | }); |
| 63 | }], | 63 | }], |
| 64 | scope: { | 64 | scope: { |
| 65 | latitud: '=', | 65 | latitud: '=', |
| 66 | longitud: '=', | 66 | longitud: '=', |
| 67 | zoom: '=', | 67 | zoom: '=', |
| 68 | marcadores: '=', | 68 | marcadores: '=', |
| 69 | parametros: '=' | 69 | parametros: '=' |
| 70 | } | 70 | } |
| 71 | }; | 71 | }; |
| 72 | }); | 72 | }); |
| 73 | 73 |
src/js/service.js
| 1 | angular.module('focaLogisticaPedidoRuta') | 1 | angular.module('focaLogisticaPedidoRuta') |
| 2 | .service( | 2 | .service( |
| 3 | 'focaLogisticaPedidoRutaService', ['$http', 'API_ENDPOINT', function($http, API_ENDPOINT | 3 | 'focaLogisticaPedidoRutaService', ['$http', 'API_ENDPOINT', function($http, API_ENDPOINT |
| 4 | ) { | 4 | ) { |
| 5 | return { | 5 | return { |
| 6 | obtenerActividad: function(parametros) { | 6 | obtenerActividad: function(parametros) { |
| 7 | return $http.post(API_ENDPOINT.URL + '/seguimiento/filtros', parametros); | 7 | return $http.post(API_ENDPOINT.URL + '/seguimiento/filtros', parametros); |
| 8 | }, | ||
| 9 | obtenerVehiculoById: function(idVehiculo) { | ||
| 10 | return $http.get(API_ENDPOINT.URL + '/vehiculo/' + idVehiculo); | ||
| 11 | }, | ||
| 12 | obtenerRemitoById: function(idRemito) { | ||
| 13 | return $http.get(API_ENDPOINT.URL + '/remito/obtener/' + idRemito); | ||
| 8 | } | 14 | } |
| 9 | }; | 15 | }; |
| 10 | }]); | 16 | }]); |
| 11 | 17 |
src/views/foca-detalle-vehiculo.html
| 1 | <div class="modal-header"> | 1 | <div class="modal-header"> |
| 2 | <h4>Detalle de carga</h4> | 2 | <h4>Detalle de carga</h4> |
| 3 | <h3>-EN DESARROLLO</h3> | 3 | <!-- TODO: quitar llaves {{}} y usar ng-bind --> |
| 4 | <h4>-EN DESARROLLO</h4> | ||
| 5 | Remito Nº | ||
| 6 | <strong ng-bind="remito.numeroRemito"></strong> | ||
| 7 | , Cliente | ||
| 8 | <strong ng-bind="remito.nombreCliente"></strong> | ||
| 9 | , Domicilio | ||
| 10 | <strong ng-bind="remito.domicilioStamp"></strong> | ||
| 4 | </div> | 11 | </div> |
| 5 | <div class="modal-body"> | 12 | <div class="modal-body"> |
| 6 | <div> | 13 | <div> |
| 7 | <div class="col-12" ng-repeat="articulo in articulos"> | 14 | <div class="col-12" ng-repeat="(key, articulo) in articulos"> |
| 8 | <input | 15 | <input |
| 9 | type="radio" | 16 | type="radio" |
| 10 | name="articuloRadio" | 17 | name="articuloRadio" |
| 11 | id="{{articulo.id}}" | 18 | id="{{articulo.id}}" |
| 19 | ng-checked="articulo.checked" | ||
| 20 | ng-disabled="articulo.cargado" | ||
| 12 | ng-click="cambioArticulo(articulo)" | 21 | ng-click="cambioArticulo(articulo)" |
| 13 | > | 22 | > |
| 14 | <span>Articulo: {{articulo.descripcion}},</span> | 23 | <span>Articulo: {{articulo.descripcion}},</span> |
| 15 | <span>Cantidad Cargada: {{articulo.cantidad}}</span> | 24 | <span>Total: {{articulo.cantidad}},</span> |
| 16 | <span>Cantidad a Cargar: </span> | 25 | <span>Cantidad Cargada: {{articulo.cantidadCargada || 0}},</span> |
| 26 | <span>Pendiente: {{articulo.cantidad - articulo.cantidadCargada}} </span> | ||
| 17 | </div> | 27 | </div> |
| 18 | <strong class="col-12" ng-bind="vehiculo.tractor"></strong> | 28 | <strong class="col-12" ng-bind="vehiculo.tractor"></strong> |
| 19 | <strong class="col-12">Cisternas:</strong> | 29 | <strong class="col-12">Cisternas:</strong> |
| 20 | <div class="form-group row input-group" ng-repeat="cisterna in vehiculo.cisternas"> | 30 | <div class="form-group row input-group" ng-repeat="(key, cisterna) in vehiculo.cisternas"> |
| 21 | <div class="col-1 mt-2"> | 31 | <div class="col-1 mt-2"> |
| 22 | <strong>{{cisterna.codigo}}</strong> | 32 | <strong>{{cisterna.codigo}}</strong> |
| 23 | </div> | 33 | </div> |
| 24 | <input | 34 | <input |
| 25 | class="form-control col-2" | 35 | class="form-control col-2 mr-3" |
| 26 | foca-tipo-input | 36 | foca-tipo-input |
| 27 | foca-teclado | 37 | foca-teclado |
| 28 | placeholder="A cargar..." | 38 | placeholder="A cargar..." |
| 29 | ng-model="cisterna.aCargar" | 39 | ng-model="aCargar[key]" |
| 30 | ng-disabled="articuloSeleccionado.cantidad > cisterna.disponible" | 40 | ng-disabled="(articuloSeleccionado.idArticulo !== cisterna.cisternaCarga.idProducto && |
| 41 | cisterna.cisternaCarga.idProducto) || !tieneArticulosPendientes()" | ||
| 42 | ng-change="actualizarArticulo()" | ||
| 31 | > | 43 | > |
| 32 | <div class="input-group-append"> | 44 | <div class="progress foca-alto-progress col-4 pl-0 pr-0 mt-1"> |
| 33 | <button | ||
| 34 | class="form-control btn btn-outline-secondary" | ||
| 35 | ng-disabled="articuloSeleccionado.cantidad > cisterna.disponible"> | ||
| 36 | <i | ||
| 37 | class="fa fa-save" | ||
| 38 | ng-click="cargarACisterna(cisterna)" | ||
| 39 | aria-hidden="true"></i> | ||
| 40 | </button> | ||
| 41 | </div> | ||
| 42 | <div class="progress foca-alto col-8 pl-0 pr-0 mt-1"> | ||
| 43 | <strong class="col-12 mt-1 text-center position-absolute" | 45 | <strong class="col-12 mt-1 text-center position-absolute" |
| 44 | >{{cisterna.cisternaCarga.cantidad || 0}} / {{cisterna.capacidad}}</strong> | 46 | >{{cisterna.cisternaCarga.cantidad || 0}} / {{cisterna.capacidad}}</strong> |
| 45 | <div | 47 | <div |
| 46 | id="{{cisterna.id}}" | 48 | id="{{cisterna.id}}" |
| 47 | class="progress-bar" | 49 | class="progress-bar" |
| 48 | role="progressbar" | 50 | role="progressbar" |
| 49 | aria-valuemin="0" | 51 | aria-valuemin="0" |
| 50 | aria-valuemax="{{cisterna.capacidad}}" | 52 | aria-valuemax="{{cisterna.capacidad}}" |
| 51 | ng-style="{'width':'{{calcularPorcentaje(cisterna)}}'}"> | 53 | ng-style="{'width':'{{calcularPorcentaje(cisterna)}}'}"> |
| 52 | </div> | 54 | </div> |
| 53 | </div> | 55 | </div> |
| 54 | <div class="col-1 mt-1"> | 56 | <div class="col-4 mt-2"> |
| 55 | <i class="fa fa-info" data-toggle="tooltip" title="asd"></i> | 57 | <strong>{{cisterna.cisternaCarga.articulo.DetArt || 'Sin articulo'}}</strong> |
| 56 | </div> | 58 | </div> |
| 59 | <!--TODO: descomentar cuando se use--> | ||
| 60 | <!-- <div class="col-1 mt-1"> | ||
| 61 | <i class="fa fa-info" uib-tooltip="Información cisterna"></i> | ||
| 62 | </div> --> | ||
| 63 | </div> | ||
| 64 | <div class="col-12 aling-end"> | ||
| 65 | <button | ||
| 66 | class="form-control" | ||
| 67 | type="button" | ||
| 68 | ng-disabled="!articuloSeleccionado || articuloSeleccionado.cantidad - | ||
| 69 | articuloSeleccionado.cantidadCargada !== 0 || !tieneArticulosPendientes()" | ||
| 70 | ng-click="cargarACisternas(vehiculo)"> | ||
| 71 | Cargar cisternas | ||
| 72 | </button> | ||
| 57 | </div> | 73 | </div> |
| 58 | </div> | 74 | </div> |
| 59 | </div> | 75 | </div> |
| 60 | <div class="modal-footer py-1"> | 76 | <div class="modal-footer py-1"> |
| 61 | <button class="btn btn-sm btn-secondary" type="button" ng-click="aceptar()">Aceptar</button> | 77 | <button |
src/views/foca-logistica-pedido-ruta.html
| 1 | <script> | ||
| 2 | function allowDrop(ev) { | ||
| 3 | ev.preventDefault(); | ||
| 4 | } | ||
| 5 | function drag(ev, marcador) { | ||
| 6 | marcador = JSON.stringify(marcador); | ||
| 7 | ev.dataTransfer.setData("marcador", marcador); | ||
| 8 | var dom_el = document.getElementById('test'); | ||
| 9 | var scope = angular.element(dom_el).scope(); | ||
| 10 | scope.arrastra(); | ||
| 11 | } | ||
| 12 | function drop(ev) { | ||
| 13 | ev.preventDefault(); | ||
| 14 | var data = ev.dataTransfer.getData("marcador"); | ||
| 15 | var dom_el = document.getElementById(ev.target.id); | ||
| 16 | var ng_el = angular.element(dom_el); | ||
| 17 | var ng_el_scope = ng_el.scope(); | ||
| 18 | ng_el_scope.cargar(ev.target.id, data); | ||
| 19 | ng_el_scope.$digest(); | ||
| 20 | } | ||
| 21 | function dropEnd() { | ||
| 22 | console.log('drop'); | ||
| 23 | var dom_el = document.getElementById('test'); | ||
| 24 | var scope = angular.element(dom_el).scope(); | ||
| 25 | scope.noArrastra(); | ||
| 26 | } | ||
| 27 | </script> | ||
| 28 | <div class="foca-logistica-pedido-ruta" id="test"> | 1 | <div class="foca-logistica-pedido-ruta" id="test"> |
| 29 | <h3>-EN DESARROLLO</h3> | 2 | <div class="row"> |
| 3 | <foca-cabecera-facturador | ||
| 4 | titulo="titulo" | ||
| 5 | fecha="now" | ||
| 6 | class="mb-0 col-lg-12" | ||
| 7 | ></foca-cabecera-facturador> | ||
| 8 | </div> | ||
| 9 | <div class="row px-5 py-2 botonera-secundaria"> | ||
| 10 | <div class="col-12"> | ||
| 11 | <foca-botonera-facturador botones="botonera" extra="5" class="row"></foca-botonera-facturador> | ||
| 12 | </div> | ||
| 13 | </div> | ||
| 30 | <div class="row"> | 14 | <div class="row"> |
| 31 | <div class="offset-1 col-9"> | 15 | <div class="offset-1 col-9"> |
| 32 | <foca | 16 | <foca |
| 33 | latitud="-32.89214159952345" | 17 | latitud="-32.89214159952345" |
| 34 | longitud="-68.84572999101856" | 18 | longitud="-68.84572999101856" |
| 35 | zoom="14" | 19 | zoom="14" |
| 36 | marcadores="marcadores" | 20 | marcadores="marcadores" |
| 37 | parametros= "datosBuscados" | 21 | parametros= "datosBuscados" |
| 38 | /> | 22 | /> |
| 39 | </div> | 23 | </div> |
| 40 | <div class="col-2 pl-0"> | 24 | <div class="col-2 pl-0"> |
| 41 | <input | 25 | <input |
| 42 | type="date" | 26 | type="date" |
| 43 | ng-model="now" | 27 | ng-model="now" |
| 44 | class="btn col-12 my-1" | 28 | class="btn col-12 my-1" |
| 45 | foca-focus="true" | 29 | foca-focus="true" |
| 46 | ng-blur="fecha()" | 30 | ng-blur="fecha()" |
| 47 | hasta-hoy | 31 | hasta-hoy |
| 48 | /> | 32 | /> |
| 49 | <button | 33 | <button |
| 50 | type="button" | 34 | type="button" |
| 51 | ng-class="{'active': idUsuario == 0}" | 35 | ng-class="{'active': idUsuario == 0}" |
| 52 | class="btn col-12 my-1" | 36 | class="btn col-12 my-1" |
| 53 | ng-click="general()" | 37 | ng-click="general()" |
| 54 | >General</button> | 38 | >General</button> |
| 55 | <button | 39 | <button |
| 56 | type="button" | 40 | type="button" |
| 57 | ng-class="{'active': idUsuario != 0}" | 41 | ng-class="{'active': idUsuario != 0}" |
| 58 | class="btn col-12 my-1" | 42 | class="btn col-12 my-1" |
| 59 | ng-click="individual()" | 43 | ng-click="individual()" |
| 60 | ng-show="actividad != 'Cobranza'" | ||
| 61 | >Individual</button> | 44 | >Individual</button> |
| 62 | <div class="form-group" ng-show="idUsuario == -1"> | 45 | <div class="form-group" ng-show="idUsuario == -1"> |
| 63 | <input | 46 | <input |
| 64 | type="text" | 47 | type="text" |
| 65 | placeholder="Vendedor" | 48 | placeholder="Vendedor" |
| 66 | class="form-control" | 49 | class="form-control" |
| 67 | ng-model="idUsuarioInput" | 50 | ng-model="idUsuarioInput" |
| 68 | ng-keypress="search($event.keyCode)" | 51 | ng-keypress="search($event.keyCode)" |
| 69 | foca-focus="idUsuario == -1" | 52 | foca-focus="idUsuario == -1" |
| 70 | ng-show="actividad == 'Nota de pedido'" | ||
| 71 | > | ||
| 72 | <input | ||
| 73 | type="text" | ||
| 74 | placeholder="Vehiculo" | ||
| 75 | class="form-control" | ||
| 76 | ng-model="idUsuarioInput" | ||
| 77 | ng-keypress="search($event.keyCode)" | ||
| 78 | foca-focus="idUsuario == -1" | ||
| 79 | ng-show="actividad == 'Entrega de producto'" | ||
| 80 | > | 53 | > |
| 81 | </div> | 54 | </div> |
| 82 | <button | ||
| 83 | type="button" | ||
| 84 | class="btn col-12 my-1 boton-salir" | ||
| 85 | ng-click="salir()" | ||
| 86 | > | ||
| 87 | Salir | ||
| 88 | </button> | ||
| 89 | </div> | 55 | </div> |
| 90 | <input | ||
| 91 | class="col-auto form-control" | ||
| 92 | ng-click="seleccionarVehiculo()" | ||
| 93 | placeholder="Seleccionar vehiculo" | ||
| 94 | readonly | ||
| 95 | /> | ||
| 96 | <div class="row"> | 56 | <div class="row"> |
| 97 | <div | 57 | <div |
| 98 | class="container col-auto" | 58 | class="container col-auto" |
| 99 | ng-repeat="vehiculo in vehiculos" | 59 | ng-repeat="vehiculo in vehiculos" |
| 100 | ng-click="mostrarDetalleVehiculo(vehiculo)" | 60 | ng-click="mostrarDetalleVehiculo(vehiculo)" |
| 101 | > | 61 | > |
| 102 | <div> | 62 | <div> |
| 103 | <div class="col-md-3 col-sm-6"> | 63 | <div class="col-md-3 col-sm-6"> |
| 104 | <div class="progress-circle blue" ng-class="{'arrastrando': arrastrando}"> | 64 | <div class="progress-circle blue" ng-class="{'arrastrando': arrastrando}"> |
| 105 | <span class="progress-left"> | 65 | <span class="progress-left"> |
| 106 | <span class="progress-bar"></span> | 66 | <span class="progress-bar"></span> |
| 107 | </span> | 67 | </span> |
| 108 | <span class="progress-right"> | 68 | <span class="progress-right"> |
| 109 | <span class="progress-bar"></span> | 69 | <span class="progress-bar"></span> |
| 110 | </span> | 70 | </span> |
| 111 | <div class="progress-value">{{vehiculo.codigo}}</div> | 71 | <div class="progress-value">{{vehiculo.codigo}}</div> |
| 112 | </div> | 72 | </div> |
| 113 | </div> | 73 | </div> |
| 74 | <div class="row"> | ||
| 75 | <div class="text-left col-6"> | ||
| 76 | <i | ||
| 77 | class="fa fa-info fa-2x" | ||
| 78 | uib-tooltip="Ver información del vehículo" | ||
| 79 | ng-click="informacionVehiculo(vehiculo)"></i> | ||
| 80 | </div> | ||
| 81 | <div class="text-right col-6"> | ||
| 82 | <i | ||
| 83 | class="fa fa-trash fa-2x" | ||
| 84 | uib-tooltip="Eliminar vehiculo" | ||
| 85 | ng-click="quitarVehiculo(vehiculo)"></i> | ||
| 86 | </div> | ||
| 87 | </div> | ||
| 114 | <div | 88 | <div |
| 115 | class="col-12 border border-dark text-center" | 89 | class="col-12 border border-dark text-center" |
| 116 | ng-show="arrastrando" | 90 | ng-show="arrastrando" |
| 117 | id="{{vehiculo.id}}" | 91 | id="{{vehiculo.id}}" |
| 118 | ondrop="drop(event)" | 92 | ondrop="drop(event)" |
| 119 | ondragover="allowDrop(event)" | 93 | ondragover="allowDrop(event)" |
| 120 | >Soltar acá</div> | 94 | >Soltar acá</div> |
| 121 | </div> | 95 | </div> |
| 122 | </div> | 96 | </div> |
| 123 | </div> | 97 | </div> |
| 124 | </div> | 98 | </div> |
| 125 | </div> | 99 | </div> |
| 126 | <style> | ||
| 127 | .arrastrando { | ||
| 128 | opacity: 0.5; | ||
| 129 | } | ||
| 130 | .vertical { | ||
| 131 | display: inline-block; | ||
| 132 | width: 20%; | ||
| 133 | height: 40px; | ||
| 134 | -webkit-transform: rotate(-90deg); /* Chrome, Safari, Opera */ | ||
| 135 | transform: rotate(-90deg); | ||
| 136 | } | ||
| 137 | .progress-circle{ | ||
| 138 | width: 150px; | ||
| 139 | height: 150px; | ||
| 140 | line-height: 150px; | ||
| 141 | background: none; | ||
| 142 | margin: 0 auto; | ||
| 143 | box-shadow: none; | ||
| 144 | position: relative; | ||
| 145 | } | ||
| 146 | .progress-circle:after{ | ||
| 147 | content: ""; | ||
| 148 | width: 100%; | ||
| 149 | height: 100%; | ||
| 150 | border-radius: 50%; | ||
| 151 | border: 12px solid #fff; | ||
| 152 | position: absolute; | ||
| 153 | top: 0; | ||
| 154 | left: 0; | ||
| 155 | } | ||
| 156 | .progress-circle > span{ | ||
| 157 | width: 50%; | ||
| 158 | height: 100%; | ||
| 159 | overflow: hidden; | ||
| 160 | position: absolute; | ||
| 161 | top: 0; | ||
| 162 | z-index: 1; | ||
| 163 | } | ||
| 164 | .progress-circle .progress-left{ | ||
| 165 | left: 0; | ||
| 166 | } | ||
| 167 | .progress-circle .progress-bar{ | ||
| 168 | width: 100%; | ||
| 169 | height: 100%; | ||
| 170 | background: none; | ||
| 171 | border-width: 12px; | ||
| 172 | border-style: solid; | ||
| 173 | position: absolute; | ||
| 174 | top: 0; | ||
| 175 | } | ||
| 176 | .progress-circle .progress-left .progress-bar{ | ||
| 177 | left: 100%; | ||
| 178 | border-top-right-radius: 80px; | ||
| 179 | border-bottom-right-radius: 80px; | ||
| 180 | border-left: 0; | ||
| 181 | -webkit-transform-origin: center left; | ||
| 182 | transform-origin: center left; | ||
| 183 | } | ||
| 184 | .progress-circle .progress-right{ | ||
| 185 | right: 0; | ||
| 186 | } | ||
| 187 | .progress-circle .progress-right .progress-bar{ | ||
| 188 | left: -100%; | ||
| 189 | border-top-left-radius: 80px; | ||
| 190 | border-bottom-left-radius: 80px; | ||
| 191 | border-right: 0; | ||
| 192 | -webkit-transform-origin: center right; | ||
| 193 | transform-origin: center right; | ||
| 194 | animation: loading-1 1.8s linear forwards; | ||
| 195 | } | ||
| 196 | .progress-circle .progress-value{ | ||
| 197 | width: 90%; | ||
| 198 | height: 90%; | ||
| 199 | border-radius: 50%; | ||
| 200 | background: #44484b; | ||
| 201 | font-size: 24px; | ||
| 202 | color: #fff; | ||
| 203 | line-height: 135px; | ||
| 204 | text-align: center; | ||
| 205 | position: absolute; | ||
| 206 | top: 5%; | ||
| 207 | left: 5%; | ||
| 208 | } | ||
| 209 | .progress-circle.blue .progress-bar{ | ||
| 210 | border-color: #049dff; | ||
| 211 | } | ||
| 212 | .progress-circle.blue .progress-left .progress-bar{ | ||
| 213 | animation: loading-2 1.5s linear forwards 1.8s; | ||
| 214 | } | ||
| 215 | .progress-circle.yellow .progress-bar{ | ||
| 216 | border-color: #fdba04; | ||
| 217 | } | ||
| 218 | .progress-circle.yellow .progress-left .progress-bar{ | ||
| 219 | animation: loading-3 1s linear forwards 1.8s; | ||
| 220 | } | ||
| 221 | .progress-circle.pink .progress-bar{ | ||
| 222 | border-color: #ed687c; | ||
| 223 | } | ||
| 224 | .progress-circle.pink .progress-left .progress-bar{ | ||
| 225 | animation: loading-4 0.4s linear forwards 1.8s; | ||
| 226 | } | ||
| 227 | .progress-circle.green .progress-bar{ | ||
| 228 | border-color: #1abc9c; | ||
| 229 | } | ||
| 230 | .progress-circle.green .progress-left .progress-bar{ | ||
| 231 | animation: loading-5 1.2s linear forwards 1.8s; | ||
| 232 | } | ||
| 233 | @keyframes loading-1{ | ||
| 234 | 0%{ | ||
| 235 | -webkit-transform: rotate(0deg); | ||
| 236 | transform: rotate(0deg); | ||
| 237 | } | ||
| 238 | 100%{ | ||
| 239 | -webkit-transform: rotate(180deg); | ||
| 240 | transform: rotate(180deg); | ||
| 241 | } | ||
| 242 | } | ||
| 243 | @keyframes loading-2{ | ||
| 244 | 0%{ | ||
| 245 | -webkit-transform: rotate(0deg); | ||
| 246 | transform: rotate(0deg); | ||
| 247 | } | ||
| 248 | 100%{ | ||
| 249 | -webkit-transform: rotate(180deg); | ||
| 250 | transform: rotate(180deg); | ||
| 251 | } | ||
| 252 | } | ||
| 253 | @keyframes loading-3{ | ||
| 254 | 0%{ | ||
| 255 | -webkit-transform: rotate(0deg); | ||
| 256 | transform: rotate(0deg); | ||
| 257 | } | ||
| 258 | 100%{ | ||
| 259 | -webkit-transform: rotate(90deg); | ||
| 260 | transform: rotate(90deg); | ||
| 261 | } | ||
| 262 | } | ||
| 263 | @keyframes loading-4{ |