articulo.service.ts 3.5 KB
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { APP_SETTINGS } from '../../../etc/AppSettings';
import { IArticulo } from '../../interfaces/IArticulo';
import { ClienteService } from '../cliente/cliente.service';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class ArticuloService {
  articulos: IArticulo[] = [];
  articuloAcargar: IArticulo;
  promoAcargar: IArticulo;
  mostrar: string;
  esPromoPersonalizada: boolean = false;
  urlArticulos = `${APP_SETTINGS.apiDeboSuite}/articulos`;
  urlPromociones = `${APP_SETTINGS.apiDeboSuite}/promociones`;
  urlSinonimos = `${APP_SETTINGS.apiDeboSuite}/sinonimos`;
  urlCategorias = `${APP_SETTINGS.apiDeboSuite}/categorias`;
  urlComprobante = `${APP_SETTINGS.apiDeboSuite}/comprobante`;

  constructor(private http: HttpClient, private clienteService: ClienteService) { }

  getById(id) {
    return this.http.get(`${this.urlArticulos}/${id}`);
  }

  getAll() {
    return this.http.get(`${this.urlArticulos}`);
  }

  getAllWithPaginator(page: number = 1) {
    return this.http.get(`${this.urlArticulos}/${page}`);
  }

  setArticulos(articulo: IArticulo) {
    for (let i = 0; i < this.articulos.length; i++) {
      if (this.articulos[i].id === articulo.id) {
        if (articulo.PRO) break;
        this.articulos[i].cantidad++;
        return;
      }
    }
    this.articulos.unshift(articulo);
  }

  getPromocionByCodigos(sector, codigo) {
    return this.http.get(`${this.urlPromociones}/by-codigos/${sector}/${codigo}`);
  }

  getPromociones(sector, codigo) {
    return this.http.get(`${this.urlPromociones}/in-articulo/${sector}/${codigo}`);
  }

  getPromocionSinonimos(sector, codigo) {
    return this.http.get(`${this.urlSinonimos}/promo/${sector}/${codigo}`);
  }

  getCategorias() {
    return this.http.get(`${this.urlCategorias}`);
  }

  getComponentes(sector, codigo) {
    return this.http.get(`${this.urlPromociones}/articulos/${sector}/${codigo}`);
  }

  pay(dataPago: any) {
    return new Observable((observer) => {
      this.clienteService.getById(-1)
        .subscribe(cliente => {
          let puntoVenta = parseInt(localStorage.getItem('impresoraPVE'));
          this.markArticuloInPromoAsRemoved();
          this.http.post(`${this.urlComprobante}/guardar/${dataPago.medioPago}`, {
            productos: this.articulos,
            cliente: cliente,
            origen: 'autoservicio',
            codigoVendedor: 5,
            puntoVenta: dataPago.medioPago === 9 ? -1 * puntoVenta : puntoVenta,
            pedidoAnombreDe: dataPago.pedidoAnombreDe,
            numeroPlanilla: '11111',
          })
            .subscribe((data) => {
              observer.next(data);
              observer.complete();
            });
        });
    });
  }

  cleanShoppingCar() {
    this.articuloAcargar = undefined;
    this.promoAcargar = undefined;
    this.articulos = [];
  }

  setArticulosSinImagen(articulos: IArticulo[]) {
    articulos.forEach((articulo: IArticulo) => {
      articulo.imagenes = !articulo.imagenes ? [{ imagen: 'noImage.jpg' }] :
        !articulo.imagenes.length ? [{ imagen: 'noImage.jpg' }] : articulo.imagenes;
    });
  }

  markArticuloInPromoAsRemoved() {
    this.articulos.forEach((articulo: IArticulo) => {
      if (articulo.PRO) {
        articulo.productos.forEach((articulo: IArticulo) => {
          if (articulo.cantidadAdicionada === 0) {
            articulo.cantidad = 0;
            articulo.importeValorExtra = 0;
          }
        });
      }
    });
  }
}