producto.service.ts 2.96 KB
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { appSettings } from 'src/etc/AppSettings';
import { Producto } from '../wrappers/producto';

@Injectable({
  providedIn: 'root'
})
export class ProductoService {

  productos: Producto[] = [];
  productoAcargar: Producto;
  promoAcargar: Producto;
  mostrar: string;

  constructor(private http: HttpClient) { }

  getProductoById(id): Observable<any> {

    return this.http.get(`${appSettings.apiUrl}/articulos/${id}`);
  }

  getAll(page: number = 1): Observable<any> {

    return this.http.get(`${appSettings.apiUrl}/articulos/`);
  }

  getAllWithPaginator(page: number = 1): Observable<any> {

    return this.http.get(`${appSettings.apiUrl}/articulos/${page}`);
  }

  setProductos(producto: Producto) {

    for (let i = 0; i < this.productos.length; i++) {

      if (this.productos[i].id === producto.id) {

        if (producto.PRO) {
          if (this.promosIdenticas(this.productos[i], producto)) {
            this.productos[i].cantidad++;
            return;
          } else {
            break;
          }
        }
        this.productos[i].cantidad++;
        return;
      }
    }

    this.productos.push(producto);
  }

  getPromocionByCodigos(sector, codigo): Observable<any> {

    var url = `${appSettings.apiUrl}/promociones/by-codigos/${sector}/${codigo}`;
    // var url = `${appSettings.apiUrl}/promociones/by-codigos/${2}/${7}`;
    return this.http.get(url);
  }

  getPromociones(sector, codigo): Observable<any> {

    var url = `${appSettings.apiUrl}/promociones/incluir-articulo/${sector}/${codigo}`;
    // var url = `${appSettings.apiUrl}/promociones/incluir-articulo/${2}/${1306}`;
    return this.http.get(url);
  }

  getPromocionSinonimos(sector, codigo): Observable<any> {

    var url = `${appSettings.apiUrl}/sinonimos/promo/${sector}/${codigo}`;
    // var url = `${appSettings.apiUrl}/sinonimos/promo/${2}/${7}`;
    return this.http.get(url);
  }

  saveInBase(body): Observable<any> {
    return this.http.post(`${appSettings.apiUrl}/imagenes/guardar`, body);
  }

  deleteImage(body): Observable<any> {
    return this.http.post(`${appSettings.apiUrl}/imagen/borrar`, body);
  }

  getCategorias() {
    return this.http.get(`${appSettings.apiUrl}/categorias`);
  }

  pagar(medioPago: string) {
    return this.http.post(`${appSettings.apiUrl}/comprobante/guardar/${medioPago}`, {
      productos: this.productos
    });
  }

  private promosIdenticas(promoEnCarrito: Producto, promo: Producto) {

    var sonIdenticas = true;
    var productosPromoCarrito = promoEnCarrito.productos;
    var productosPromoAcargar = promo.productos;

    if (productosPromoCarrito.length !== productosPromoAcargar.length) {
      return false;
    }

    for (let i = 0; i < productosPromoCarrito.length; i++) {

      if (productosPromoCarrito[i].id !== productosPromoAcargar[i].id) {
        return false;
      }
    }

    return sonIdenticas;
  }

}