Commit c3031ecc9e7372bf96184fe0f98c08d2dc71c625

Authored by Marcelo Puebla
1 parent ac964d0816
Exists in master and in 1 other branch validar_pve

Borrado componente abm imagenes y los servicios que consumia.

src/app/app-routing.module.ts
1 import { NgModule } from '@angular/core'; 1 import { NgModule } from '@angular/core';
2 import { Routes, RouterModule } from '@angular/router'; 2 import { Routes, RouterModule } from '@angular/router';
3 import { HomeComponent } from './components/home/home.component'; 3 import { HomeComponent } from './components/home/home.component';
4 import { InicioComponent } from './components/inicio/inicio.component'; 4 import { InicioComponent } from './components/inicio/inicio.component';
5 import { BusquedaProductosComponent } from './components/busqueda-productos/busqueda-productos.component'; 5 import { BusquedaProductosComponent } from './components/busqueda-productos/busqueda-productos.component';
6 import { ConfirmacionCarritoComponent } from './components/confirmacion-carrito/confirmacion-carrito.component'; 6 import { ConfirmacionCarritoComponent } from './components/confirmacion-carrito/confirmacion-carrito.component';
7 import { MasterComponent } from './components/master/master.component'; 7 import { MasterComponent } from './components/master/master.component';
8 import { AmbImagenesComponent } from './components/amb-imagenes/amb-imagenes.component';
9 import { PagoComponent } from './components/pago/pago.component'; 8 import { PagoComponent } from './components/pago/pago.component';
10 import { CancelarCompraComponent } from './components/cancelar-compra/cancelar-compra.component'; 9 import { CancelarCompraComponent } from './components/cancelar-compra/cancelar-compra.component';
11 import { MensajeFinalComponent } from './components/mensaje-final/mensaje-final.component'; 10 import { MensajeFinalComponent } from './components/mensaje-final/mensaje-final.component';
12 import { ComandaComponent } from './components/comanda/comanda.component'; 11 import { ComandaComponent } from './components/comanda/comanda.component';
13 12
14 const routes: Routes = [ 13 const routes: Routes = [
15 { path: '', component: HomeComponent }, 14 { path: '', component: HomeComponent },
16 { path: 'home', component: HomeComponent }, 15 { path: 'home', component: HomeComponent },
17 { path: 'abm-imagenes', component: AmbImagenesComponent },
18 { path: 'confirmacion-carrito', component: ConfirmacionCarritoComponent }, 16 { path: 'confirmacion-carrito', component: ConfirmacionCarritoComponent },
19 { path: 'pago', component: PagoComponent }, 17 { path: 'pago', component: PagoComponent },
20 { path: 'cancelar-compra', component: CancelarCompraComponent }, 18 { path: 'cancelar-compra', component: CancelarCompraComponent },
21 { path: 'mensaje-final', component: MensajeFinalComponent }, 19 { path: 'mensaje-final', component: MensajeFinalComponent },
22 { path: 'comanda', component: ComandaComponent }, 20 { path: 'comanda', component: ComandaComponent },
23 { 21 {
24 path: '', 22 path: '',
25 component: MasterComponent, 23 component: MasterComponent,
26 children: [ 24 children: [
27 { path: 'inicio', component: InicioComponent }, 25 { path: 'inicio', component: InicioComponent },
28 { path: 'busqueda-productos', component: BusquedaProductosComponent } 26 { path: 'busqueda-productos', component: BusquedaProductosComponent }
29 ] 27 ]
30 }, 28 },
31 { path: '**', redirectTo: '/home', pathMatch: 'full' }, 29 { path: '**', redirectTo: '/home', pathMatch: 'full' },
32 ]; 30 ];
33 31
34 @NgModule({ 32 @NgModule({
35 imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})], 33 imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})],
36 exports: [RouterModule] 34 exports: [RouterModule]
37 }) 35 })
38 36
39 export class AppRoutingModule { } 37 export class AppRoutingModule { }
40 38
src/app/app.module.ts
1 //#region MODULES 1 //#region MODULES
2 import { BrowserModule } from '@angular/platform-browser'; 2 import { BrowserModule } from '@angular/platform-browser';
3 import { NgModule } from '@angular/core'; 3 import { NgModule } from '@angular/core';
4 import { AppRoutingModule } from './app-routing.module'; 4 import { AppRoutingModule } from './app-routing.module';
5 import { HttpClientModule } from '@angular/common/http'; 5 import { HttpClientModule } from '@angular/common/http';
6 import { FormsModule, ReactiveFormsModule } from '@angular/forms'; 6 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
7 import { TooltipModule } from 'ngx-bootstrap/tooltip'; 7 import { TooltipModule } from 'ngx-bootstrap/tooltip';
8 import { PopoverModule } from 'ngx-bootstrap/popover'; 8 import { PopoverModule } from 'ngx-bootstrap/popover';
9 import { CarouselModule } from 'ngx-bootstrap/carousel'; 9 import { CarouselModule } from 'ngx-bootstrap/carousel';
10 import { PaginationModule } from 'ngx-bootstrap/pagination'; 10 import { PaginationModule } from 'ngx-bootstrap/pagination';
11 //#endregion 11 //#endregion
12 12
13 //#region Keyboard 13 //#region Keyboard
14 import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; 14 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
15 import { MatButtonModule } from '@angular/material/button'; 15 import { MatButtonModule } from '@angular/material/button';
16 import { MatKeyboardModule } from '@ngx-material-keyboard/core'; 16 import { MatKeyboardModule } from '@ngx-material-keyboard/core';
17 //#endregion 17 //#endregion
18 18
19 //#region COMPONENTS 19 //#region COMPONENTS
20 import { AppComponent } from './app.component'; 20 import { AppComponent } from './app.component';
21 import { HeaderComponent } from './components/header/header.component'; 21 import { HeaderComponent } from './components/header/header.component';
22 import { SidebarComponent } from './components/sidebar/sidebar.component'; 22 import { SidebarComponent } from './components/sidebar/sidebar.component';
23 import { HomeComponent } from './components/home/home.component'; 23 import { HomeComponent } from './components/home/home.component';
24 import { InicioComponent } from './components/inicio/inicio.component'; 24 import { InicioComponent } from './components/inicio/inicio.component';
25 import { BusquedaProductosComponent } from './components/busqueda-productos/busqueda-productos.component'; 25 import { BusquedaProductosComponent } from './components/busqueda-productos/busqueda-productos.component';
26 import { ConfirmacionCarritoComponent } from './components/confirmacion-carrito/confirmacion-carrito.component'; 26 import { ConfirmacionCarritoComponent } from './components/confirmacion-carrito/confirmacion-carrito.component';
27 import { MasterComponent } from './components/master/master.component'; 27 import { MasterComponent } from './components/master/master.component';
28 import { PopoverPromosComponent } from './components/popover-promos/popover-promos.component'; 28 import { PopoverPromosComponent } from './components/popover-promos/popover-promos.component';
29 import { PopoverSinonimosComponent } from './components/popover-sinonimos/popover-sinonimos.component'; 29 import { PopoverSinonimosComponent } from './components/popover-sinonimos/popover-sinonimos.component';
30 import { AmbImagenesComponent } from './components/amb-imagenes/amb-imagenes.component';
31 import { PagoComponent } from './components/pago/pago.component'; 30 import { PagoComponent } from './components/pago/pago.component';
32 import { CancelarCompraComponent } from './components/cancelar-compra/cancelar-compra.component'; 31 import { CancelarCompraComponent } from './components/cancelar-compra/cancelar-compra.component';
33 import { MensajeFinalComponent } from './components/mensaje-final/mensaje-final.component'; 32 import { MensajeFinalComponent } from './components/mensaje-final/mensaje-final.component';
34 import { ComandaComponent } from './components/comanda/comanda.component'; 33 import { ComandaComponent } from './components/comanda/comanda.component';
35 //#endregion 34 //#endregion
36 35
37 @NgModule({ 36 @NgModule({
38 declarations: [ 37 declarations: [
39 AppComponent, 38 AppComponent,
40 HeaderComponent, 39 HeaderComponent,
41 SidebarComponent, 40 SidebarComponent,
42 HomeComponent, 41 HomeComponent,
43 InicioComponent, 42 InicioComponent,
44 BusquedaProductosComponent, 43 BusquedaProductosComponent,
45 ConfirmacionCarritoComponent, 44 ConfirmacionCarritoComponent,
46 MasterComponent, 45 MasterComponent,
47 PopoverPromosComponent, 46 PopoverPromosComponent,
48 PopoverSinonimosComponent, 47 PopoverSinonimosComponent,
49 AmbImagenesComponent,
50 PagoComponent, 48 PagoComponent,
51 CancelarCompraComponent, 49 CancelarCompraComponent,
52 MensajeFinalComponent, 50 MensajeFinalComponent,
53 ComandaComponent 51 ComandaComponent
54 ], 52 ],
55 imports: [ 53 imports: [
56 BrowserModule, 54 BrowserModule,
57 AppRoutingModule, 55 AppRoutingModule,
58 HttpClientModule, 56 HttpClientModule,
59 FormsModule, 57 FormsModule,
60 ReactiveFormsModule, 58 ReactiveFormsModule,
61 ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }), 59 ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }),
62 TooltipModule.forRoot(), 60 TooltipModule.forRoot(),
63 PopoverModule.forRoot(), 61 PopoverModule.forRoot(),
64 BrowserAnimationsModule, 62 BrowserAnimationsModule,
65 MatKeyboardModule, 63 MatKeyboardModule,
66 MatButtonModule, 64 MatButtonModule,
67 CarouselModule.forRoot(), 65 CarouselModule.forRoot(),
68 PaginationModule.forRoot() 66 PaginationModule.forRoot()
69 ], 67 ],
70 providers: [], 68 providers: [],
71 bootstrap: [AppComponent] 69 bootstrap: [AppComponent]
72 }) 70 })
73 export class AppModule { } 71 export class AppModule { }
74 72
src/app/components/amb-imagenes/amb-imagenes.component.html
1 <app-header></app-header> File was deleted
2
3 <div class="container-fluid">
4 <div class="row m-3">
5 <div class="col">
6 <p class="h2">Configuración de imágenes</p>
7 </div>
8 </div>
9
10 <div class="row mx-3 search">
11 <div class="col">
12 <span class="fa fa-search form-control-lg form-control-search pl-3"></span>
13 <input
14 type="text"
15 class="form-control form-control-lg shadow-sm rounded-pill px-5"
16 placeholder="Búsqueda productos"
17 [(ngModel)]="searchTerm"
18 (ngModelChange)="filterItems()">
19 </div>
20 </div>
21
22 <div class="row m-3 vh-60 overflow-scroll">
23 <div class="col">
24 <h5>Productos</h5>
25 <table class="table table-striped table-hover table-borderless shadow">
26 <thead>
27 <tr class="bg-primary text-center text-white shadow-sm">
28 <th>Nombre</th>
29 <th colspan="2">Imagen</th>
30 </tr>
31 </thead>
32 <tbody>
33 <tr class="shadow-sm" *ngFor="let articulo of auxProductos">
34 <td class="align-middle">
35 <p class="m-0">{{articulo.DET_LAR}}</p>
36 <p class="m-0"><small>Descripción: {{articulo.DET_LAR}}</small></p>
37 <p class="m-0"><small>Sector: {{articulo.CodSec}}</small></p>
38 <p class="m-0"><small>Código: {{articulo.CodArt}}</small></p>
39 </td>
40 <td>
41 <img
42 *ngIf="articulo.imagenes.length == 0"
43 class="fade-in w-100 mx-auto img-fluid"
44 src="{{apiImagenes}}/imagenes/noImage.jpg">
45 <carousel [interval]="false">
46 <slide *ngFor="let item of articulo.imagenes; let index = index">
47 <img
48 *ngIf="!item.fromGallery"
49 class="fade-in img-fluid w-100"
50 src="{{apiImagenes}}/imagenes/{{item.imagen}}">
51 <img
52 *ngIf="item.fromGallery"
53 class="fade-in img-fluid w-100"
54 src="{{item.base64}}">
55 <button
56 (click)="deleteImage(articulo.imagenes, index)"
57 type="button"
58 class="btn btn-light btn-delete-image position-absolute close">
59 <span aria-hidden="true">&times;</span>
60 </button>
61 </slide>
62 </carousel>
63 </td>
64 <td class="align-middle text-center">
65 <div class="custom-file">
66 <input
67 type="file"
68 class="custom-file-input"
69 id="customFileLang"
70 accept="image/*"
71 (change)="onFileSelected($event, articulo)"
72 lang="es"
73 multiple>
74 <label class="custom-file-label text-left pr-5" for="customFileLang">
75 <small>Seleccionar archivo</small>
76 </label>
77 </div>
78 </td>
79 </tr>
80 </tbody>
81 </table>
82 </div>
83 </div>
84
85 <div class="row" *ngIf="paginationData">
86 <div class="col">
87 <pagination
88 [rotate]="false"
89 [(ngModel)]="paginationData.page"
90 [totalItems]="paginationData.rowCount"
91 [maxSize]="paginationData.pageCount"
92 [itemsPerPage]="paginationData.pageSize"
93 (pageChanged)="pageChanged($event)"
94 [boundaryLinks]="true"
95 [disabled]="disabledPaginador"
96 previousText="&lsaquo;"
97 nextText="&rsaquo;"
98 firstText="&laquo;"
99 lastText="&raquo;"
100 ></pagination>
101 </div>
102 </div>
103
104 </div>
105 1 <app-header></app-header>
src/app/components/amb-imagenes/amb-imagenes.component.scss
1 .search .form-control-search { File was deleted
2 position: absolute;
3 z-index: 2;
4 display: block;
5 text-align: center;
6 pointer-events: none;
7 color: #aaa;
8 line-height: inherit;
9 }
10
11 .custom-file-input:lang(es) ~ .custom-file-label::after {
12 content: "Elegir";
13 }
14
15 .btn-delete-image {
16 top: 0;
17 left: 95%;
18 }
19 1 .search .form-control-search {
src/app/components/amb-imagenes/amb-imagenes.component.spec.ts
1 import { async, ComponentFixture, TestBed } from '@angular/core/testing'; File was deleted
2
3 import { AmbImagenesComponent } from './amb-imagenes.component';
4
5 describe('AmbImagenesComponent', () => {
6 let component: AmbImagenesComponent;
7 let fixture: ComponentFixture<AmbImagenesComponent>;
8
9 beforeEach(async(() => {
10 TestBed.configureTestingModule({
11 declarations: [ AmbImagenesComponent ]
12 })
13 .compileComponents();
14 }));
15
16 beforeEach(() => {
17 fixture = TestBed.createComponent(AmbImagenesComponent);
18 component = fixture.componentInstance;
19 fixture.detectChanges();
20 });
21
22 it('should create', () => {
23 expect(component).toBeTruthy();
24 });
25 });
26 1 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
src/app/components/amb-imagenes/amb-imagenes.component.ts
1 import { Component, OnInit } from '@angular/core'; File was deleted
2 import { appSettings } from 'src/etc/AppSettings';
3 import { ProductoService } from 'src/app/services/producto.service';
4 import { Producto } from 'src/app/wrappers/producto';
5 import { HttpClient } from '@angular/common/http';
6
7 @Component({
8 selector: 'app-amb-imagenes',
9 templateUrl: './amb-imagenes.component.html',
10 styleUrls: ['./amb-imagenes.component.scss']
11 })
12
13 export class AmbImagenesComponent implements OnInit {
14
15 apiUrl = appSettings.apiImagenes;
16 articulos: Producto[] = [];
17 private auxProductos: Producto[] = [];
18 private searchTerm: string = '';
19 private paginationData: any;
20 private disabledPaginador: boolean = false;
21
22 constructor(private productoService: ProductoService, private http: HttpClient) { }
23
24 ngOnInit() {
25
26 this.productoService.getAllWithPaginator()
27 .subscribe((res) => {
28
29 this.articulos = res.data;
30 this.paginationData = res.pagination;
31 this.filterItems();
32 }, error => console.error(error));
33 }
34
35 onFileSelected(event, articulo: Producto) {
36
37 let auxFiles: FileList = event.target.files;
38 Array.from(auxFiles).forEach(file => {
39
40 this.onLoad(file)
41 .then(result => {
42 // articulo.imagenes.push({
43 // name: file.name + articulo.CodArt + articulo.CodSec,
44 // fromGallery: true,
45 // imagen: result,
46 // id_articulo: articulo.id
47 // });
48 let imagenAguardar = {
49 imagen: {
50 name: `${articulo.CodSec}${articulo.CodArt}${file.name}`,
51 base64: result,
52 codigo: articulo.CodArt,
53 sector: articulo.CodSec,
54 id_articulo: articulo.id
55 },
56 articulo: articulo
57 };
58 this.saveInBase(imagenAguardar);
59 });
60 })
61 }
62
63 filterItems() {
64
65 this.auxProductos = this.articulos.filter(x => {
66 return x.DET_LAR.toLowerCase().includes(this.searchTerm.toLowerCase()) ||
67 x.CodArt.toString().includes(this.searchTerm.toLowerCase()) ||
68 x.CodSec.toString().includes(this.searchTerm.toLowerCase());
69 });
70 }
71
72 saveInBase(imagenAguardar) {
73
74 this.productoService.saveInBase(imagenAguardar.imagen)
75 .subscribe(res => {
76 imagenAguardar.imagen['id'] = res[0];
77 imagenAguardar.imagen['fromGallery'] = true;
78 imagenAguardar.articulo.imagenes.push(imagenAguardar.imagen);
79 }, error => console.error(error));
80 }
81
82 onLoad(file) {
83
84 return new Promise((resolve, reject) => {
85
86 var fr = new FileReader();
87
88 fr.onload = function () {
89
90 resolve(fr.result);
91 };
92
93 fr.readAsDataURL(file);
94 });
95
96 }
97
98 deleteImage(imagenes, index: number) {
99
100 if (!imagenes[index].name) {
101 imagenes[index].name = imagenes[index].imagen;
102 }
103
104 this.productoService.deleteImage(imagenes[index])
105 .subscribe(res => {
106
107 if (res) {
108 imagenes.splice(index, 1);
109 }
110 }, error => console.error(error));
111 }
112
113 pageChanged(event: any): void {
114 this.disabledPaginador = true;
115 this.productoService.getAllWithPaginator(event.page)
116 .subscribe((res) => {
117 this.disabledPaginador = false;
118 this.articulos = res.data;
119 this.paginationData = res.pagination;
120 this.filterItems();
121 }, error => console.error(error));
122 }
123
124 }
125 1 import { Component, OnInit } from '@angular/core';
src/app/services/producto.service.ts
1 import { Injectable } from '@angular/core'; 1 import { Injectable } from '@angular/core';
2 import { HttpClient } from '@angular/common/http'; 2 import { HttpClient } from '@angular/common/http';
3 import { Observable } from 'rxjs'; 3 import { Observable } from 'rxjs';
4 import { appSettings } from 'src/etc/AppSettings'; 4 import { appSettings } from 'src/etc/AppSettings';
5 import { Producto } from '../wrappers/producto'; 5 import { Producto } from '../wrappers/producto';
6 6
7 @Injectable({ 7 @Injectable({
8 providedIn: 'root' 8 providedIn: 'root'
9 }) 9 })
10 export class ProductoService { 10 export class ProductoService {
11 11
12 productos: Producto[] = []; 12 productos: Producto[] = [];
13 productoAcargar: Producto; 13 productoAcargar: Producto;
14 promoAcargar: Producto; 14 promoAcargar: Producto;
15 mostrar: string; 15 mostrar: string;
16 16
17 constructor(private http: HttpClient) { } 17 constructor(private http: HttpClient) { }
18 18
19 getProductoById(id): Observable<any> { 19 getProductoById(id): Observable<any> {
20 20
21 return this.http.get(`${appSettings.apiUrl}/articulos/${id}`); 21 return this.http.get(`${appSettings.apiUrl}/articulos/${id}`);
22 } 22 }
23 23
24 getAll(page: number = 1): Observable<any> { 24 getAll(): Observable<any> {
25 25
26 return this.http.get(`${appSettings.apiUrl}/articulos/`); 26 return this.http.get(`${appSettings.apiUrl}/articulos/`);
27 } 27 }
28 28
29 getAllWithPaginator(page: number = 1): Observable<any> { 29 getAllWithPaginator(page: number = 1): Observable<any> {
30 30
31 return this.http.get(`${appSettings.apiUrl}/articulos/${page}`); 31 return this.http.get(`${appSettings.apiUrl}/articulos/${page}`);
32 } 32 }
33 33
34 setProductos(producto: Producto) { 34 setProductos(producto: Producto) {
35 35
36 for (let i = 0; i < this.productos.length; i++) { 36 for (let i = 0; i < this.productos.length; i++) {
37 37
38 if (this.productos[i].id === producto.id) { 38 if (this.productos[i].id === producto.id) {
39 39
40 if (producto.PRO) { 40 if (producto.PRO) {
41 if (this.promosIdenticas(this.productos[i], producto)) { 41 if (this.promosIdenticas(this.productos[i], producto)) {
42 this.productos[i].cantidad++; 42 this.productos[i].cantidad++;
43 return; 43 return;
44 } else { 44 } else {
45 break; 45 break;
46 } 46 }
47 } 47 }
48 this.productos[i].cantidad++; 48 this.productos[i].cantidad++;
49 return; 49 return;
50 } 50 }
51 } 51 }
52 52
53 this.productos.push(producto); 53 this.productos.push(producto);
54 } 54 }
55 55
56 getPromocionByCodigos(sector, codigo): Observable<any> { 56 getPromocionByCodigos(sector, codigo): Observable<any> {
57 57
58 var url = `${appSettings.apiUrl}/promociones/by-codigos/${sector}/${codigo}`; 58 var url = `${appSettings.apiUrl}/promociones/by-codigos/${sector}/${codigo}`;
59 // var url = `${appSettings.apiUrl}/promociones/by-codigos/${2}/${7}`; 59 // var url = `${appSettings.apiUrl}/promociones/by-codigos/${2}/${7}`;
60 return this.http.get(url); 60 return this.http.get(url);
61 } 61 }
62 62
63 getPromociones(sector, codigo): Observable<any> { 63 getPromociones(sector, codigo): Observable<any> {
64 64
65 var url = `${appSettings.apiUrl}/promociones/incluir-articulo/${sector}/${codigo}`; 65 var url = `${appSettings.apiUrl}/promociones/incluir-articulo/${sector}/${codigo}`;
66 // var url = `${appSettings.apiUrl}/promociones/incluir-articulo/${2}/${1306}`; 66 // var url = `${appSettings.apiUrl}/promociones/incluir-articulo/${2}/${1306}`;
67 return this.http.get(url); 67 return this.http.get(url);
68 } 68 }
69 69
70 getPromocionSinonimos(sector, codigo): Observable<any> { 70 getPromocionSinonimos(sector, codigo): Observable<any> {
71 71
72 var url = `${appSettings.apiUrl}/sinonimos/promo/${sector}/${codigo}`; 72 var url = `${appSettings.apiUrl}/sinonimos/promo/${sector}/${codigo}`;
73 // var url = `${appSettings.apiUrl}/sinonimos/promo/${2}/${7}`; 73 // var url = `${appSettings.apiUrl}/sinonimos/promo/${2}/${7}`;
74 return this.http.get(url); 74 return this.http.get(url);
75 } 75 }
76 76
77 saveInBase(body): Observable<any> {
78 return this.http.post(`${appSettings.apiUrl}/imagenes/guardar`, body);
79 }
80
81 deleteImage(body): Observable<any> {
82 return this.http.post(`${appSettings.apiUrl}/imagen/borrar`, body);
83 }
84
85 getCategorias() { 77 getCategorias() {
86 return this.http.get(`${appSettings.apiUrl}/categorias`); 78 return this.http.get(`${appSettings.apiUrl}/categorias`);
87 } 79 }
88 80
89 pagar(medioPago: string) { 81 pagar(medioPago: string) {
90 return this.http.post(`${appSettings.apiUrl}/comprobante/guardar/${medioPago}`, { 82 return this.http.post(`${appSettings.apiUrl}/comprobante/guardar/${medioPago}`, {
91 productos: this.productos 83 productos: this.productos
92 }); 84 });
93 } 85 }
94 86
95 private promosIdenticas(promoEnCarrito: Producto, promo: Producto) { 87 private promosIdenticas(promoEnCarrito: Producto, promo: Producto) {
96 88
97 var sonIdenticas = true; 89 var sonIdenticas = true;
98 var productosPromoCarrito = promoEnCarrito.productos; 90 var productosPromoCarrito = promoEnCarrito.productos;
99 var productosPromoAcargar = promo.productos; 91 var productosPromoAcargar = promo.productos;
100 92
101 if (productosPromoCarrito.length !== productosPromoAcargar.length) { 93 if (productosPromoCarrito.length !== productosPromoAcargar.length) {
102 return false; 94 return false;
103 } 95 }
104 96
105 for (let i = 0; i < productosPromoCarrito.length; i++) { 97 for (let i = 0; i < productosPromoCarrito.length; i++) {
106 98
107 if (productosPromoCarrito[i].id !== productosPromoAcargar[i].id) { 99 if (productosPromoCarrito[i].id !== productosPromoAcargar[i].id) {
108 return false; 100 return false;
109 } 101 }
110 } 102 }
111 103
112 return sonIdenticas; 104 return sonIdenticas;
113 } 105 }
114 106
115 } 107 }
116 108