Commit 628ec131b5c102c28e67a478b01d7fd50b4aba45
1 parent
cc1b095a10
Exists in
master
Subir fotos
Showing
2 changed files
with
5 additions
and
5 deletions
Show diff stats
src/js/controller.js
| 1 | angular.module('focaModalDetalles') | 1 | angular.module('focaModalDetalles') |
| 2 | .controller('focaModalDetallesController', | 2 | .controller('focaModalDetallesController', |
| 3 | [ | 3 | [ |
| 4 | '$scope', | 4 | '$scope', |
| 5 | '$uibModalInstance', | 5 | '$uibModalInstance', |
| 6 | 'focaModalService', | 6 | 'focaModalService', |
| 7 | 'APP', | 7 | 'APP', |
| 8 | '$timeout', | 8 | '$timeout', |
| 9 | 'parametros', | 9 | 'parametros', |
| 10 | function($scope, $uibModalInstance, focaModalService, APP, $timeout, parametros) { | 10 | function($scope, $uibModalInstance, focaModalService, APP, $timeout, parametros) { |
| 11 | 11 | ||
| 12 | $scope.mobile = APP === 'cobranza'; | 12 | $scope.mobile = APP === 'cobranza'; |
| 13 | $scope.detalles = parametros; | 13 | $scope.detalles = parametros; |
| 14 | $scope.newFiles = {}; | 14 | $scope.files = []; |
| 15 | 15 | ||
| 16 | $scope.$watch('newFiles.files', function() { | 16 | $scope.$watch('files', function() { |
| 17 | $scope.newFiles.files.forEach(function(file) { | 17 | $scope.files.forEach(function(file) { |
| 18 | $scope.detalles.files.push(file); | 18 | $scope.detalles.files.push(file); |
| 19 | }); | 19 | }); |
| 20 | validarExtSize(); | 20 | validarExtSize(); |
| 21 | }); | 21 | }, true); |
| 22 | 22 | ||
| 23 | $scope.eliminarImg = function(key) { | 23 | $scope.eliminarImg = function(key) { |
| 24 | $scope.detalles.files.splice(key, 1); | 24 | $scope.detalles.files.splice(key, 1); |
| 25 | }; | 25 | }; |
| 26 | 26 | ||
| 27 | $scope.cancel = function() { | 27 | $scope.cancel = function() { |
| 28 | $uibModalInstance.dismiss('cancel'); | 28 | $uibModalInstance.dismiss('cancel'); |
| 29 | }; | 29 | }; |
| 30 | 30 | ||
| 31 | $scope.aceptar = function() { | 31 | $scope.aceptar = function() { |
| 32 | $scope.detalles.importe = parseFloat($scope.detalles.importe); | 32 | $scope.detalles.importe = parseFloat($scope.detalles.importe); |
| 33 | $uibModalInstance.close($scope.detalles); | 33 | $uibModalInstance.close($scope.detalles); |
| 34 | }; | 34 | }; |
| 35 | 35 | ||
| 36 | $scope.cambioFoto = function(data) { | 36 | $scope.cambioFoto = function(data) { |
| 37 | $scope.detalles.files.push(data.files); | 37 | $scope.detalles.files.push(data.files); |
| 38 | }; | 38 | }; |
| 39 | 39 | ||
| 40 | $scope.seleccionarFoto = function() { | 40 | $scope.seleccionarFoto = function() { |
| 41 | var srcType = Camera.PictureSourceType.SAVEDPHOTOALBUM; | 41 | var srcType = Camera.PictureSourceType.SAVEDPHOTOALBUM; |
| 42 | var options = setOptions(srcType); | 42 | var options = setOptions(srcType); |
| 43 | navigator.camera.getPicture(cameraSuccess, cameraError, options); | 43 | navigator.camera.getPicture(cameraSuccess, cameraError, options); |
| 44 | }; | 44 | }; |
| 45 | 45 | ||
| 46 | $scope.tomarFoto = function() { | 46 | $scope.tomarFoto = function() { |
| 47 | navigator.camera.getPicture(cameraSuccess, cameraError, | 47 | navigator.camera.getPicture(cameraSuccess, cameraError, |
| 48 | { | 48 | { |
| 49 | destinationType: Camera.DestinationType.DATA_URL, | 49 | destinationType: Camera.DestinationType.DATA_URL, |
| 50 | quality: 100 | 50 | quality: 100 |
| 51 | }); | 51 | }); |
| 52 | }; | 52 | }; |
| 53 | 53 | ||
| 54 | function cameraSuccess(imageBase64) { | 54 | function cameraSuccess(imageBase64) { |
| 55 | 55 | ||
| 56 | var fecha = new Date(); | 56 | var fecha = new Date(); |
| 57 | var size = (imageBase64.length * (3/4)); | 57 | var size = (imageBase64.length * (3/4)); |
| 58 | 58 | ||
| 59 | var imagen = { | 59 | var imagen = { |
| 60 | name: 'imagen_' + fecha.getTime() + '.jpg', | 60 | name: 'imagen_' + fecha.getTime() + '.jpg', |
| 61 | size: size, | 61 | size: size, |
| 62 | base64: imageBase64, | 62 | base64: imageBase64, |
| 63 | }; | 63 | }; |
| 64 | $timeout(function() { | 64 | $timeout(function() { |
| 65 | $scope.detalles.files.push(imagen); | 65 | $scope.detalles.files.push(imagen); |
| 66 | }); | 66 | }); |
| 67 | } | 67 | } |
| 68 | function cameraError(err) { | 68 | function cameraError(err) { |
| 69 | console.log(err); | 69 | console.log(err); |
| 70 | } | 70 | } |
| 71 | function setOptions(srcType) { | 71 | function setOptions(srcType) { |
| 72 | var options = { | 72 | var options = { |
| 73 | // Some common settings are 20, 50, and 100 | 73 | // Some common settings are 20, 50, and 100 |
| 74 | quality: 100, | 74 | quality: 100, |
| 75 | destinationType: Camera.DestinationType.DATA_URL, | 75 | destinationType: Camera.DestinationType.DATA_URL, |
| 76 | sourceType: srcType, | 76 | sourceType: srcType, |
| 77 | encodingType: Camera.EncodingType.JPEG, | 77 | encodingType: Camera.EncodingType.JPEG, |
| 78 | mediaType: Camera.MediaType.PICTURE, | 78 | mediaType: Camera.MediaType.PICTURE, |
| 79 | allowEdit: true, | 79 | allowEdit: true, |
| 80 | correctOrientation: true | 80 | correctOrientation: true |
| 81 | }; | 81 | }; |
| 82 | return options; | 82 | return options; |
| 83 | } | 83 | } |
| 84 | function validarExtSize() { | 84 | function validarExtSize() { |
| 85 | var totalSize = 0; | 85 | var totalSize = 0; |
| 86 | var invalidExt = false; | 86 | var invalidExt = false; |
| 87 | $scope.detalles.files.forEach(function(file) { | 87 | $scope.detalles.files.forEach(function(file) { |
| 88 | //CONVIERTO BYTES A MB | 88 | //CONVIERTO BYTES A MB |
| 89 | totalSize += file.size / 1000000; | 89 | totalSize += file.size / 1000000; |
| 90 | var fileExt = file.name.split('.').pop(); | 90 | var fileExt = file.name.split('.').pop(); |
| 91 | 91 | ||
| 92 | if(fileExt !== 'jpg' && fileExt !== 'png') { | 92 | if(fileExt !== 'jpg' && fileExt !== 'png') { |
| 93 | invalidExt = true; | 93 | invalidExt = true; |
| 94 | } | 94 | } |
| 95 | }); | 95 | }); |
| 96 | 96 | ||
| 97 | if (totalSize > 150) { | 97 | if (totalSize > 150) { |
| 98 | focaModalService.alert('El/los archivo/s exceden la capacidad máxima'); | 98 | focaModalService.alert('El/los archivo/s exceden la capacidad máxima'); |
| 99 | $scope.detalles.files = []; | 99 | $scope.detalles.files = []; |
| 100 | } else if (invalidExt) { | 100 | } else if (invalidExt) { |
| 101 | focaModalService.alert('Ha ingresado un archivo con extensión inválida'); | 101 | focaModalService.alert('Ha ingresado un archivo con extensión inválida'); |
| 102 | $scope.detalles.files = []; | 102 | $scope.detalles.files = []; |
| 103 | } | 103 | } |
| 104 | } | 104 | } |
| 105 | } | 105 | } |
| 106 | ] | 106 | ] |
| 107 | ); | 107 | ); |
| 108 | 108 |
src/views/modal-detalles.html
| 1 | <div class="modal-header"> | 1 | <div class="modal-header"> |
| 2 | <h3 class="modal-title">Ingrese detalles</h3> | 2 | <h3 class="modal-title">Ingrese detalles</h3> |
| 3 | </div> | 3 | </div> |
| 4 | <div class="modal-body" id="modal-body"> | 4 | <div class="modal-body" id="modal-body"> |
| 5 | <form name="formObservaciones"> | 5 | <form name="formObservaciones"> |
| 6 | <div class="row"> | 6 | <div class="row"> |
| 7 | <div class="col"><label class="form-control-sm p-0">Observaciones:</label></div> | 7 | <div class="col"><label class="form-control-sm p-0">Observaciones:</label></div> |
| 8 | <div class="col-10"> | 8 | <div class="col-10"> |
| 9 | <textarea | 9 | <textarea |
| 10 | teclado-virtual | 10 | teclado-virtual |
| 11 | rows="5" | 11 | rows="5" |
| 12 | ng-model="detalles.observacion" | 12 | ng-model="detalles.observacion" |
| 13 | class="form-control form-control-sm" | 13 | class="form-control form-control-sm" |
| 14 | foca-focus="focused == 9" | 14 | foca-focus="focused == 9" |
| 15 | ng-focus="focused = 9" | 15 | ng-focus="focused = 9" |
| 16 | ng-required="true"> | 16 | ng-required="true"> |
| 17 | </textarea> | 17 | </textarea> |
| 18 | </div> | 18 | </div> |
| 19 | </div> | 19 | </div> |
| 20 | <div class="row my-3"> | 20 | <div class="row my-3"> |
| 21 | <div class="col-12 col-md-5"> | 21 | <div class="col-12 col-md-5"> |
| 22 | <div class="row"> | 22 | <div class="row"> |
| 23 | <div class="col"> | 23 | <div class="col"> |
| 24 | <label class="form-control-sm p-0">Monto cubierto:</label> | 24 | <label class="form-control-sm p-0">Monto cubierto:</label> |
| 25 | </div> | 25 | </div> |
| 26 | <div class="col-6 col-md-7 input-group input-group-sm mb-3"> | 26 | <div class="col-6 col-md-7 input-group input-group-sm mb-3"> |
| 27 | <div class="input-group-prepend"> | 27 | <div class="input-group-prepend"> |
| 28 | <span class="input-group-text" id="size">$</span> | 28 | <span class="input-group-text" id="size">$</span> |
| 29 | </div> | 29 | </div> |
| 30 | <input | 30 | <input |
| 31 | foca-tipo-input | 31 | foca-tipo-input |
| 32 | teclado-virtual | 32 | teclado-virtual |
| 33 | class="form-control " | 33 | class="form-control " |
| 34 | placeholder="Importe" | 34 | placeholder="Importe" |
| 35 | ng-model="detalles.importe" | 35 | ng-model="detalles.importe" |
| 36 | ng-keypress="next($event.keyCode)" | 36 | ng-keypress="next($event.keyCode)" |
| 37 | ng-required="true" | 37 | ng-required="true" |
| 38 | foca-focus="focused == 6" | 38 | foca-focus="focused == 6" |
| 39 | ng-focus="focused = 6" | 39 | ng-focus="focused = 6" |
| 40 | aria-describedby="size"/> | 40 | aria-describedby="size"/> |
| 41 | </div> | 41 | </div> |
| 42 | </div> | 42 | </div> |
| 43 | </div> | 43 | </div> |
| 44 | <div class="col-12 col-md-7"> | 44 | <div class="col-12 col-md-7"> |
| 45 | <div class="row"> | 45 | <div class="row"> |
| 46 | <!-- Botones PC --> | 46 | <!-- Botones PC --> |
| 47 | <div class="col-md-5 col-12 text-right"> | 47 | <div class="col-md-5 col-12 text-right"> |
| 48 | <label class=" btn btn-outline-debo" ng-if="!mobile"> | 48 | <label class=" btn btn-outline-debo" ng-if="!mobile"> |
| 49 | <input | 49 | <input |
| 50 | type="file" | 50 | type="file" |
| 51 | ng-file-model="newFiles.files" | 51 | ng-file-model="$parent.files" |
| 52 | multiple | 52 | multiple |
| 53 | accept=".jpg,.png"> | 53 | accept=".jpg,.png"> |
| 54 | <small>Elegir Archivos </small> | 54 | <small>Elegir Archivos </small> |
| 55 | </label> | 55 | </label> |
| 56 | </div> | 56 | </div> |
| 57 | <div class="col-md-7 col-12 mt-1" ng-if=' 1 == detalles.files.length '> | 57 | <div class="col-md-7 col-12 mt-1" ng-if=' 1 == detalles.files.length '> |
| 58 | <span class="text-left" ng-repeat="(key, file) in detalles.files">{{file.name | limitTo: 15}}</span> | 58 | <span class="text-left" ng-repeat="(key, file) in detalles.files">{{file.name | limitTo: 15}}</span> |
| 59 | </div> | 59 | </div> |
| 60 | <div class="col-md-7 col-12 align-items-center" ng-if="detalles.files.length > 1"> | 60 | <div class="col-md-7 col-12 align-items-center" ng-if="detalles.files.length > 1"> |
| 61 | <small class="text-left ">{{detalles.files.length}} Archivos </small> | 61 | <small class="text-left ">{{detalles.files.length}} Archivos </small> |
| 62 | </div> | 62 | </div> |
| 63 | <div class="col text-center"> | 63 | <div class="col text-center"> |
| 64 | <small class="text-muted"> Solo .jpg y .png - Tamaño máximo 150mb</small> | 64 | <small class="text-muted"> Solo .jpg y .png - Tamaño máximo 150mb</small> |
| 65 | </div> | 65 | </div> |
| 66 | <!-- Botones MOBILE --> | 66 | <!-- Botones MOBILE --> |
| 67 | <div class="col-12 mb-2 col-md-6" ng-if="mobile"> | 67 | <div class="col-12 mb-2 col-md-6" ng-if="mobile"> |
| 68 | <button | 68 | <button |
| 69 | type="button" | 69 | type="button" |
| 70 | ng-if="mobile" | 70 | ng-if="mobile" |
| 71 | class="form-control form-control-sm btn-outline-debo" | 71 | class="form-control form-control-sm btn-outline-debo" |
| 72 | ng-click="seleccionarFoto()"> | 72 | ng-click="seleccionarFoto()"> |
| 73 | Seleccione imagen | 73 | Seleccione imagen |
| 74 | </button> | 74 | </button> |
| 75 | </div> | 75 | </div> |
| 76 | <div class="col-12 mb-2 col-md-6" ng-if="mobile"> | 76 | <div class="col-12 mb-2 col-md-6" ng-if="mobile"> |
| 77 | <button | 77 | <button |
| 78 | type="button" | 78 | type="button" |
| 79 | ng-if="mobile" | 79 | ng-if="mobile" |
| 80 | class="form-control form-control-sm" | 80 | class="form-control form-control-sm" |
| 81 | ng-click="tomarFoto()"> | 81 | ng-click="tomarFoto()"> |
| 82 | Tome imagen | 82 | Tome imagen |
| 83 | </button> | 83 | </button> |
| 84 | </div> | 84 | </div> |
| 85 | <div class="col-12" ng-if="mobile"> | 85 | <div class="col-12" ng-if="mobile"> |
| 86 | <small class="text-muted">Solo .jpg y .png - Tamaño máximo 150mb</small> | 86 | <small class="text-muted">Solo .jpg y .png - Tamaño máximo 150mb</small> |
| 87 | </div> | 87 | </div> |
| 88 | </div> | 88 | </div> |
| 89 | </div> | 89 | </div> |
| 90 | </div> | 90 | </div> |
| 91 | </form> | 91 | </form> |
| 92 | <div class="row" ng-if="!mobile"> | 92 | <div class="row" ng-if="!mobile"> |
| 93 | <div class="col-md-3" ng-repeat="(key, file) in detalles.files"> | 93 | <div class="col-md-3" ng-repeat="(key, file) in detalles.files"> |
| 94 | <img ng-src="{{file.url}}" alt="" class="col-md-12 p-0"> | 94 | <img ng-src="{{file.url}}" alt="" class="col-md-12 p-0"> |
| 95 | <button | 95 | <button |
| 96 | type="button" | 96 | type="button" |
| 97 | class="btn btn-delete-image btn-danger rounded-circle position-absolute p-0" | 97 | class="btn btn-delete-image btn-danger rounded-circle position-absolute p-0" |
| 98 | title="Eliminar" | 98 | title="Eliminar" |
| 99 | ng-click="eliminarImg(key)"> | 99 | ng-click="eliminarImg(key)"> |
| 100 | <i class="fa fa-times" aria-hidden="true"></i> | 100 | <i class="fa fa-times" aria-hidden="true"></i> |
| 101 | </button> | 101 | </button> |
| 102 | </div> | 102 | </div> |
| 103 | </div> | 103 | </div> |
| 104 | <div class="row" ng-if="mobile"> | 104 | <div class="row" ng-if="mobile"> |
| 105 | <div class="col-12 d-flex justify-content-between" ng-repeat="(key, file) in detalles.files"> | 105 | <div class="col-12 d-flex justify-content-between" ng-repeat="(key, file) in detalles.files"> |
| 106 | <strong ng-bind="file.name"></strong> | 106 | <strong ng-bind="file.name"></strong> |
| 107 | <button | 107 | <button |
| 108 | type="button" | 108 | type="button" |
| 109 | class="btn p-0" | 109 | class="btn p-0" |
| 110 | title="Eliminar" | 110 | title="Eliminar" |
| 111 | ng-click="eliminarImg(key)"> | 111 | ng-click="eliminarImg(key)"> |
| 112 | <i class="fa fa-times" aria-hidden="true"></i> | 112 | <i class="fa fa-times" aria-hidden="true"></i> |
| 113 | </button> | 113 | </button> |
| 114 | </div> | 114 | </div> |
| 115 | </div> | 115 | </div> |
| 116 | </div> | 116 | </div> |
| 117 | <div class="modal-footer"> | 117 | <div class="modal-footer"> |
| 118 | <button | 118 | <button |
| 119 | class="btn btn-secondary" | 119 | class="btn btn-secondary" |
| 120 | type="button" | 120 | type="button" |
| 121 | ng-click="cancel()" | 121 | ng-click="cancel()" |
| 122 | >Cancelar</button> | 122 | >Cancelar</button> |
| 123 | <button | 123 | <button |
| 124 | class="btn btn-primary" | 124 | class="btn btn-primary" |
| 125 | type="button" | 125 | type="button" |
| 126 | ng-click="aceptar()" | 126 | ng-click="aceptar()" |
| 127 | ng-disabled="!formObservaciones.$valid" | 127 | ng-disabled="!formObservaciones.$valid" |
| 128 | >Aceptar</button> | 128 | >Aceptar</button> |
| 129 | </div> | 129 | </div> |
| 130 | 130 |