Commit 059814304958875f3da1b09eddca872342e05b66

Authored by Marcelo Puebla
1 parent 5d0a4d7bfa
Exists in master

agregados metodos y logica para manejar la lista de precios.

src/js/controller.js
... ... @@ -13,170 +13,64 @@ angular.module('focaModalPrecioCondicion')
13 13 $timeout, $filter, $scope, $uibModal, $uibModalInstance,
14 14 focaModalService, focaModalPrecioCondicionService, idListaPrecio
15 15 ) {
16   -
17   - $scope.filters = '';
18   - $scope.ingreso = false;
19   - $scope.plazosNuevos = [];
20   - $scope.plazoACargar =
21   - {
22   - item: 1
23   - };
24   - // pagination
25   - $scope.numPerPage = 10;
26   - $scope.currentPage = 1;
27   - $scope.filteredPrecioCondicion = [];
28   - $scope.currentPagePrecioCondicion = [];
29   - $scope.selectedPrecioCondicion = -1;
30   -
31   - var funcionGet = idListaPrecio ? 'getPreciosCondicionesByIdListaPrecio' :
32   - 'getPreciosCondiciones';
33   -
34   - focaModalPrecioCondicionService
35   - [funcionGet](idListaPrecio)
36   - .then(function (res) {
37   - for (var i = 0; i < res.data.length; i++) {
38   - var plazosTemp = '';
39   - res.data[i].plazoPago.sort(function (a, b) {
40   - return a.dias - b.dias;
41   - });
42   - for (var j = 0; j < res.data[i].plazoPago.length; j++) {
43   - if (j + 1 === res.data[i].plazoPago.length) {
44   - plazosTemp += res.data[i].plazoPago[j].dias;
45   - } else {
46   - plazosTemp += res.data[i].plazoPago[j].dias + ', ';
47   - }
48   - }
49   - res.data[i].plazos = plazosTemp.trim();
50   - }
51   - $scope.precioCondicion = res.data;
52   - $scope.search();
53   - });
54   -
55   - //METODOS
56   - $scope.agregarPlazo = function (key) {
57   - if (key === 13) {
58   - if (!$scope.plazoACargar.dias) {
59   - focaModalService.alert('Ingrese cantidad de días');
60   - return;
61   - }
62   - var tieneEseDia = $scope.plazosNuevos.filter(function (a) {
63   - return a.dias === $scope.plazoACargar.dias;
  16 + $scope.plazos = [{ dias: 0 }];
  17 + $scope.editingPlazo = false;
  18 + $scope.openModalListaDePrecios = false;
  19 + $scope.chosenClientList = true;
  20 + $scope.listaDePreciosAlternativa = null;
  21 +
  22 + onInit();
  23 +
  24 + function onInit() {
  25 + //Metodo para traer la lista de precio asociada al cliente
  26 + focaModalPrecioCondicionService.getListaPrecio(idListaPrecio)
  27 + .then(function (res) {
  28 + console.log("Lista de precios", res);
  29 + $scope.listaDePreciosAsociada = res.data[0];
64 30 });
65   - if (tieneEseDia.length > 0) {
66   - focaModalService.alert('Ya ha ingresado un plazo con esos días');
67   - return;
68   - }
69   - $scope.plazosNuevos.push($scope.plazoACargar);
70   - $scope.plazoACargar =
71   - {
72   - item: $scope.plazosNuevos.length + 1
73   - };
74   - }
75   - };
76   -
77   - $scope.volver = function () {
78   - $scope.ingreso = false;
79   - $scope.plazosNuevos = [];
80   - $scope.plazoACargar =
81   - {
82   - item: $scope.plazosNuevos.length + 1
83   - };
84   - };
85   -
86   - $scope.quitarPlazo = function (key) {
87   - $scope.plazosNuevos.splice(key, 1);
88   - $scope.plazoACargar =
89   - {
90   - item: $scope.plazosNuevos.length + 1
91   - };
92   - };
93   -
94   - $scope.search = function (pressed) {
95   - $scope.filteredPrecioCondicion = $filter('filter')(
96   - $scope.precioCondicion,
97   - { $: $scope.filters }
98   - );
  31 + }
99 32  
100   - if (pressed) {
101   - if ($scope.filteredPrecioCondicion.length === 0) {
102   - $timeout(function () {
103   - angular.element('#search')[0].focus();
104   - $scope.filters = '';
  33 + //#region Metodos para la lista de precios
  34 + $scope.openListaDePrecios = function () {
  35 + var datos = null;
  36 + focaModalPrecioCondicionService.getAllListaPrecio()
  37 + .then(function (res) {
  38 + datos = res.data;
  39 + focaModalService.modal({
  40 + titulo: 'Lista de precios',
  41 + data: datos,
  42 + size: 'md',
  43 + columnas: [
  44 + {
  45 + propiedad: 'ID',
  46 + nombre: 'Codigo'
  47 + },
  48 + {
  49 + propiedad: 'DES',
  50 + NOMBRE: 'Nombre'
  51 + }
  52 + ],
  53 + }).then(function (res) {
  54 + $scope.chosenClientList = false;
  55 + $scope.listaDePreciosAlternativa = res;
  56 + console.log(res);
  57 + }).catch(function (e) {
  58 + console.log(e);
105 59 });
106   - } else {
107   - primera();
108   - }
109   - }
110   -
111   - $scope.lastPage = Math.ceil(
112   - $scope.filteredPrecioCondicion.length / $scope.numPerPage
113   - );
114   -
115   - $scope.resetPage();
116   - };
117   -
118   - $scope.resetPage = function () {
119   - $scope.currentPage = 1;
120   - $scope.selectPage(1);
121   - };
122   -
123   - $scope.selectPage = function (page) {
124   - var start = (page - 1) * $scope.numPerPage;
125   - var end = start + $scope.numPerPage;
126   - $scope.paginas = [];
127   - $scope.paginas = calcularPages(page);
128   - $scope.currentPagePrecioCondicion =
129   - $scope.filteredPrecioCondicion.slice(start, end);
130   - $scope.currentPage = page;
131   - };
132   -
133   - $scope.select = function (precioCondicion) {
134   - $uibModalInstance.close(precioCondicion);
135   - };
136   -
137   - $scope.cancel = function () {
138   - $uibModalInstance.dismiss('cancel');
139   - };
140   -
141   - $scope.busquedaDown = function (key) {
142   - if (key === 40) {
143   - primera(key);
144   - }
145   - };
146   -
147   - $scope.busquedaPress = function (key) {
148   - if (key === 13) {
149   - $scope.search(true);
150   - }
  60 + });
151 61 };
152   -
153   - $scope.itemProducto = function (key) {
154   - if (key === 38) {
155   - anterior(key);
156   - }
157   -
158   - if (key === 40) {
159   - siguiente(key);
160   - }
161   -
162   - if (key === 37) {
163   - retrocederPagina();
164   - }
165   -
166   - if (key === 39) {
167   - avanzarPagina();
168   - }
  62 + $scope.selectListaDePrecios = function (listaDePrecios) {
  63 + $scope.chosenClientList = true;
169 64 };
170   -
171   - $scope.verListaPrecio = function (id) {
172   - $uibModal.open(
  65 + $scope.verListaProductos = function (id) {
  66 + var modalInstance = $uibModal.open(
173 67 {
174 68 ariaLabelledBy: 'Busqueda de Productos',
175 69 templateUrl: 'modal-busqueda-productos.html',
176 70 controller: 'modalBusquedaProductosCtrl',
177 71 resolve: {
178 72 parametroProducto: {
179   - idLista: id,
  73 + idLista: parseInt(id),
180 74 cotizacion: 1,
181 75 simbolo: '$',
182 76 soloMostrar: true
... ... @@ -185,72 +79,42 @@ angular.module(&#39;focaModalPrecioCondicion&#39;)
185 79 size: 'md'
186 80 }
187 81 );
  82 + modalInstance.result
  83 + .then(function (res) {
  84 + console.log("Producto => ", res);
  85 + })
  86 + .catch(function (e) { console.log(e) });
188 87 };
  88 + $scope.closeModalPrecioCondicion = function () {
  89 + $uibModalInstance.dismiss('cancel');
  90 + };
  91 + //#endregion
189 92  
190   - function calcularPages(paginaActual) {
191   - var paginas = [];
192   - paginas.push(paginaActual);
193   -
194   - if (paginaActual - 1 > 1) {
195   -
196   - paginas.unshift(paginaActual - 1);
197   - if (paginaActual - 2 > 1) {
198   - paginas.unshift(paginaActual - 2);
199   - }
200   - }
201   -
202   - if (paginaActual + 1 < $scope.lastPage) {
203   - paginas.push(paginaActual + 1);
204   - if (paginaActual + 2 < $scope.lastPage) {
205   - paginas.push(paginaActual + 2);
206   - }
207   - }
208   -
209   - if (paginaActual !== 1) {
210   - paginas.unshift(1);
211   - }
212   -
213   - if (paginaActual !== $scope.lastPage) {
214   - paginas.push($scope.lastPage);
215   - }
216   -
217   - return paginas;
218   - }
219   -
220   - function primera() {
221   - $scope.selectedPrecioCondicion = 0;
222   - }
223   -
224   - function anterior() {
225   - if ($scope.selectedPrecioCondicion === 0 && $scope.currentPage > 1) {
226   - retrocederPagina();
227   - } else {
228   - $scope.selectedPrecioCondicion--;
  93 + //#region Metodos para los plazos
  94 + $scope.addMorePlazos = function () {
  95 + if ($scope.plazos.length < 4) {
  96 + $scope.plazos.unshift({ dias: 0 });
229 97 }
230   - }
231   -
232   - function siguiente() {
233   - if ($scope.selectedPrecioCondicion <
234   - $scope.currentPagePrecioCondicion.length) {
235   - $scope.selectedPrecioCondicion++;
236   - } else {
237   - avanzarPagina();
  98 + };
  99 + $scope.editPlazo = function () {
  100 + $scope.editingPlazo = true;
  101 + };
  102 + $scope.validateMinMax = function (plazo, min, max) {
  103 + plazo.dias = parseInt(plazo.dias);
  104 + if (plazo.dias === null || plazo.dias === undefined || isNaN(plazo.dias)) {
  105 + plazo.dias = '0';
  106 + return;
238 107 }
239   - }
240   -
241   - function retrocederPagina() {
242   - if ($scope.currentPage > 1) {
243   - $scope.selectPage($scope.currentPage - 1);
244   - $scope.selectedPrecioCondicion = $scope.numPerPage - 1;
  108 + if (parseInt(plazo.dias) < min) {
  109 + plazo.dias = '0';
  110 + return;
245 111 }
246   - }
247   -
248   - function avanzarPagina() {
249   - if ($scope.currentPage < $scope.lastPage) {
250   - $scope.selectPage($scope.currentPage + 1);
251   - $scope.selectedPrecioCondicion = 0;
  112 + if (parseInt(plazo.dias) > max) {
  113 + plazo.dias = '365';
  114 + return;
252 115 }
253   - }
  116 + };
  117 + //#endregion
254 118 }
255 119 ]
256 120 );
... ... @@ -13,6 +13,13 @@ angular.module(&#39;focaModalPrecioCondicion&#39;)
13 13 getPreciosCondicionesByIdListaPrecio: function (idListaPrecio) {
14 14 return $http.get(API_ENDPOINT.URL + '/precio-condicion/plazo-pago/' +
15 15 idListaPrecio);
  16 + },
  17 + getListaPrecio: function (idListaPrecio) {
  18 + return $http.get(API_ENDPOINT.URL + '/lista-precio/' +
  19 + idListaPrecio);
  20 + },
  21 + getAllListaPrecio: function () {
  22 + return $http.get(API_ENDPOINT.URL + '/lista-precio');
16 23 }
17 24 };
18 25 }
src/views/modal-precio-condicion.html
1   -<div class="modal-header py-1">
2   - <div class="row w-100">
3   - <div class="col-lg-6">
4   - <h5 ng-show="!ingreso" class="modal-title my-1">Búsqueda de Precio-Condición</h5>
5   - <h5 ng-show="ingreso" class="modal-title my-1">Nuevos Plazos</h5>
6   - </div>
7   - <div class="input-group col-lg-6 pr-0 my-2" ng-show="!ingreso">
8   - <button
9   - class="btn btn-outline-debo mr-2"
10   - ng-click="ingreso = true"
11   - ng-show="!ingreso"
12   - title="Nuevo">
13   - <i class="fa fa-plus" aria-hidden="true"></i>
14   - </button>
15   - <input
16   - type="text"
17   - class="form-control form-control-sm"
18   - id="search"
19   - placeholder="Busqueda"
20   - ng-model="filters"
21   - ng-change="search()"
22   - ng-keydown="busquedaDown($event.keyCode)"
23   - ng-keypress="busquedaPress($event.keyCode)"
24   - foca-focus="selectedPrecioCondicion == -1"
25   - ng-focus="selectedPrecioCondicion = -1"
26   - teclado-virtual
27   - >
28   - <div class="input-group-append">
29   - <button
30   - class="btn btn-outline-secondary"
31   - type="button"
32   - title="Buscar"
33   - ng-click="busquedaPress(13)">
34   - <i class="fa fa-search" aria-hidden="true"></i>
35   - </button>
  1 +<div>
  2 + <div class="modal-header py-1">
  3 + <div class="row w-100">
  4 + <div class="col-lg-6">
  5 + <h5 class="modal-title my-1">Precio-Condición</h5>
36 6 </div>
37 7 </div>
38 8 </div>
39   -</div>
40   -<div class="modal-body" id="modal-body">
41   -
42   -
43   - <table ng-show="!ingreso" class="table table-striped table-sm">
44   - <thead>
45   - <tr>
46   - <th>Código</th>
47   - <th>Nombre</th>
48   - <th>Lista Precio</th>
49   - <th>Plazos</th>
50   - <th></th>
51   - </tr>
52   - </thead>
53   - <tbody>
54   - <tr ng-show="currentPagePrecioCondicion.length == 0">
55   - <td colspan="6">
  9 + <div class="modal-body" id="modal-body">
  10 + <div ng-show="!ingreso">
  11 + <div class="row" ng-show="listaDePreciosAsociada.length == 0">
  12 + <div class="col">
56 13 No se encontraron resultados.
57   - </td>
58   - </tr>
59   - <tr class="selectable"
60   - ng-repeat="(key, precioCondicion) in currentPagePrecioCondicion">
61   - <td ng-bind="precioCondicion.id | rellenarDigitos: 4: 0"
62   - ng-click="select(precioCondicion)"></td>
63   - <td ng-bind="precioCondicion.nombre"
64   - ng-click="select(precioCondicion)"></td>
65   - <td ng-bind="precioCondicion.idListaPrecio"
66   - ng-click="select(precioCondicion)"></td>
67   - <td ng-bind="precioCondicion.plazos"
68   - ng-click="select(precioCondicion)"></td>
69   - <td>
70   - <button
71   - type="button"
72   - class="btn btn-sm p-1 float-right"
73   - title="Seleccionar"
74   - ng-class="{
75   - 'btn-secondary': selectedPrecioCondicion != key + 1,
76   - 'btn-primary': selectedPrecioCondicion == key + 1
77   - }"
78   - foca-focus="selectedPrecioCondicion == {{key + 1}}"
79   - ng-keydown="itemProducto($event.keyCode)"
80   - ng-click="select(precioCondicion)"
81   - >
82   - <i class="fa fa-circle-thin" aria-hidden="true"></i>
83   - </button>
84   - <button
85   - type="button"
86   - class="btn btn-sm p-1 float-right btn-secondary mr-2"
87   - title="Ver lista precio"
88   - ng-click="verListaPrecio(precioCondicion.idListaPrecio)"
89   - >
90   - <i class="fa fa-eye" aria-hidden="true"></i>
91   - </button>
92   - </td>
93   - </tr>
94   - </tbody>
95   - </table>
96   -
97   - <table class="table table-striped table-sm" ng-show="ingreso">
98   - <thead>
99   - <tr>
100   - <th>Item</th>
101   - <th>Días</th>
102   - <th></th>
103   - </tr>
104   - </thead>
105   - <tbody>
106   - <tr>
107   - <td>
108   - <input
109   - type="number"
110   - class="form-control text-right"
111   - ng-model="plazoACargar.item"
112   - readonly
113   - />
114   - </td>
115   - <td>
116   - <input
117   - type="number"
118   - class="form-control text-right"
119   - min="0"
120   - ng-model="plazoACargar.dias"
121   - ng-keypress="agregarPlazo($event.keyCode)"
122   - foca-focus="ingreso"
123   - />
124   - </td>
125   - <td class="text-center">
126   - <button
127   - class="btn btn-outline-secondary"
128   - title="Agregar"
129   - ng-click="agregarPlazo(13)"
130   - >
131   - <i class="fa fa-save"></i>
132   - </button>
133   - </td>
134   - </tr>
135   - <tr ng-repeat="(key, plazo) in plazosNuevos">
136   - <td class="text-right" ng-bind="key + 1"></td>
137   - <td class="text-right" ng-bind="plazo.dias"></td>
138   - <td class="text-center">
139   - <button
140   - class="btn btn-outline-secondary"
141   - title="Eliminar"
142   - ng-click="quitarPlazo(key)"
143   - >
144   - <i class="fa fa-trash"></i>
145   - </button>
146   - </td>
147   - </tr>
148   - </tbody>
149   - </table>
150   -</div>
151   -<div class="modal-footer py-1">
152   - <nav ng-show="currentPagePrecioCondicion.length > 0 && !ingreso" class="mr-auto">
153   - <ul class="pagination pagination-sm mb-0">
154   - <li class="page-item" ng-class="{'disabled': currentPage == 1}">
155   - <a class="page-link" href="javascript:void();" ng-click="selectPage(currentPage - 1)">
156   - <span aria-hidden="true">&laquo;</span>
157   - <span class="sr-only">Anterior</span>
158   - </a>
159   - </li>
160   - <li
161   - class="page-item"
162   - ng-repeat="pagina in paginas"
163   - ng-class="{'active': pagina == currentPage}"
164   - >
165   - <a
166   - class="page-link"
167   - href="javascript:void();"
168   - ng-click="selectPage(pagina)"
169   - ng-bind="pagina"
170   - ></a>
171   - </li>
172   - <li class="page-item" ng-class="{'disabled': currentPage == lastPage}">
173   - <a class="page-link" href="javascript:void();" ng-click="selectPage(currentPage + 1)">
174   - <span aria-hidden="true">&raquo;</span>
175   - <span class="sr-only">Siguiente</span>
176   - </a>
177   - </li>
178   - </ul>
179   - </nav>
180   - <button
181   - ng-show="!ingreso"
182   - class="btn btn-sm btn-secondary"
183   - type="button"
184   - ng-click="cancel()"
185   - >Cancelar
186   - </button>
187   - <button
188   - ng-show="ingreso"
189   - ng-disabled="plazosNuevos.length === 0"
190   - class="btn btn-sm btn-primary"
191   - type="button"
192   - ng-click="select(plazosNuevos)"
193   - >Aceptar
194   - </button>
195   - <button
196   - ng-show="ingreso"
197   - class="btn btn-sm btn-secondary"
198   - type="button"
199   - ng-click="volver()"
200   - >Volver
201   - </button>
202   -</div>
  14 + </div>
  15 + </div>
  16 + <div class="row px-2">
  17 + <div class="col-lg-6">
  18 + <div class="row border-top py-2">
  19 + <div class="col-lg-9 col-9">Lista asociada al cliente</div>
  20 + <div class="col-lg-3 col-3 text-center">
  21 + <button
  22 + ng-class="{'btn-primary': chosenClientList, 'btn-default': !chosenClientList}"
  23 + class="btn btn-sm p-1"
  24 + ng-click="selectListaDePrecios(listaDePreciosAsociada)">
  25 + <span class="fa fa-circle-thin"></span>
  26 + </button>
  27 + </div>
  28 + </div>
  29 + <div class="row align-items-center pb-2">
  30 + <div class="col-lg-2 col-2 text-center" ng-bind="listaDePreciosAsociada.ID"></div>
  31 + <div class="col-lg-7 col-7" ng-bind="listaDePreciosAsociada.DES"></div>
  32 + <div class="col-lg-3 col-3 text-center">
  33 + <button ng-click="verListaProductos(listaDePreciosAsociada.ID)" class="btn btn-sm p-1">
  34 + <span class="fa fa-eye"></span>
  35 + </button>
  36 + </div>
  37 + </div>
  38 + <div class="row border-top py-2">
  39 + <div class="col-lg-9 col-9">Trabajar con otra lista</div>
  40 + <div class="col-lg-3 col-3 text-center">
  41 + <button
  42 + ng-class="{'btn-primary': !chosenClientList, 'btn-default': chosenClientList}"
  43 + class="btn btn-sm btn-default p-1"
  44 + ng-click="openListaDePrecios()">
  45 + <span class="fa fa-circle-thin"></span>
  46 + </button>
  47 + </div>
  48 + </div>
  49 + <div ng-show="listaDePreciosAlternativa != null" class="row align-items-center pb-1">
  50 + <div class="col-lg-2 col-2 text-center" ng-bind="listaDePreciosAlternativa.ID"></div>
  51 + <div class="col-lg-7 col-7" ng-bind="listaDePreciosAlternativa.DES"></div>
  52 + <div class="col-lg-3 col-3 text-center">
  53 + <button ng-click="verListaProductos(listaDePreciosAlternativa.ID)" class="btn btn-sm p-1">
  54 + <span class="fa fa-eye"></span>
  55 + </button>
  56 + </div>
  57 + </div>
  58 + </div>
  59 + <div class="col">
  60 + <div class="row border-bottom py-1">
  61 + <div class="col text-center font-weight-bold">Plazos</div>
  62 + </div>
  63 + <div ng-if="!editingPlazo" class="row align-items-center justify-content-end py-2">
  64 + <div class="col-lg-9 col-9 text-center">300, 254, 215, 265, 300, 300</div>
  65 + <div class="col-lg-3 col-3">
  66 + <button class="btn btn-sm text-center" ng-click="editPlazo()">
  67 + <span class="fa fa-pencil"></span>
  68 + </button>
  69 + </div>
  70 + </div>
  71 + <div ng-if="editingPlazo" class="row align-items-center justify-content-end py-2">
  72 + <div class="col-2 col-sm-2 px-2" ng-repeat="plazo in plazos" ng-show="plazos.length > 0">
  73 + <input
  74 + type="text"
  75 + class="form-control form-control-sm text-center"
  76 + ng-model="plazo.dias"
  77 + limite-numeros-max="3"
  78 + ng-keyup="validateMinMax(plazo, 0, 365)"
  79 + select-on-click
  80 + teclado-virtual
  81 + foca-tipo-input
  82 + solo-positivos>
  83 + </div>
  84 + <div class="col-lg-2 col-2 text-center">
  85 + <button
  86 + class="btn btn-outline-debo"
  87 + ng-click="addMorePlazos()"
  88 + ng-disabled="plazos.length == 4">
  89 + <span class="fa fa-plus"></span>
  90 + </button>
  91 + </div>
  92 + <div class="col-lg-2 col-2 text-center">
  93 + <button class="btn btn-primary">
  94 + <span class="fa fa-save"></span>
  95 + </button>
  96 + </div>
  97 + </div>
  98 + </div>
  99 + </div>
  100 + </div>
  101 + </div>
  102 + <div class="modal-footer py-2">
  103 + <button class="btn btn-sm btn-secondary" type="button" ng-click="closeModalPrecioCondicion()">Cerrar
  104 + </button>
  105 + </div>
  106 +</div>
203 107 \ No newline at end of file