articulo.service.ts 2.7 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()
export class ArticuloService {
  carrito: IArticulo[] = [];
  articuloAcargar: IArticulo;
  promoAcargar: IArticulo;
  mostrar: string;
  esPromoPersonalizada: boolean = false;
  urlDeboSuite = APP_SETTINGS.apiDeboSuite;

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

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

  getAll() {
    return this.http.get(`${this.urlDeboSuite}/articulos/`);
  }

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

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

  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.urlDeboSuite}/comprobante/guardar/${dataPago.medioPago}`, {
            productos: this.carrito,
            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.carrito = [];
  }

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

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