articulo.service.ts 4.09 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 = false;
  urlDeboSuite = APP_SETTINGS.apiDeboSuite;
  medioPago: number;
  idComanda: number;
  total = 0;
  maxCantidad = 50;

  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}`);
  }

  substractCant(articulo: IArticulo) {
    if (articulo.cantidad === 1) return;
    articulo.cantidad--;
    this.calcularTotal();
  }

  addCant(articulo: IArticulo) {
    if (articulo.cantidad >= this.maxCantidad) return;
    articulo.cantidad++;
    this.calcularTotal();
  }

  calcularTotal() {
    this.total = 0;
    this.carrito.forEach(articulo => {
      this.total += (articulo.PreVen * articulo.cantidad);
    });
  }

  setArticulo(articulo: IArticulo) {
    articulo.cantidad = 1;
    for (const articuloCarrito of this.carrito) {
      if (articuloCarrito.id === articulo.id && !articulo.productos) {
        articuloCarrito.cantidad++;
        this.calcularTotal();
        return;
      }
    }
    this.setArticulosSinImagen([articulo]);
    this.carrito.unshift(articulo);
    this.calcularTotal();
  }

  deleteArticulo(index: number) {
    this.carrito.splice(index, 1);
    this.calcularTotal();
  }

  pay(dataPago: any) {
    return new Observable((observer) => {
      this.clienteService.getById(-1)
        .subscribe(cliente => {
          this.markArticuloInPromoAsRemoved();
          this.http.post(`${this.urlDeboSuite}/comprobante/guardar/${this.medioPago}`, {
            productos: this.carrito,
            cliente,
            origen: 'autoservicio',
            codigoVendedor: 5,
            puntoVenta: APP_SETTINGS.puntoVenta,
            pedidoAnombreDe: dataPago.pedidoAnombreDe,
            numeroPlanilla: APP_SETTINGS.numeroPlanilla,
            pedidoParaLlevar: localStorage.getItem('pedidoParaLlevar'),
            terminal: APP_SETTINGS.terminal,
            contactLess: true,
          })
            .subscribe((data) => {
              observer.next(data);
              observer.complete();
            }, err => {
              observer.error(err);
              observer.complete();
            });
        });
    });
  }

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

  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((articuloCarrito: IArticulo) => {
      if (articuloCarrito.PRO) {
        articuloCarrito.productos.forEach((articulo: IArticulo) => {
          if (articulo.cantidadAdicionada === 0) {
            articulo.cantidad = 0;
            articulo.importeValorExtra = 0;
          }
        });
      }
    });
  }

  changeArticulo(articuloToChange: IArticulo, articuloData: any) {
    articuloToChange.CODA = articuloData.CodArt;
    articuloToChange.CodArt = articuloData.CodArt;
    articuloToChange.SECA = articuloData.CodSec;
    articuloToChange.CodSec = articuloData.CodSec;
    articuloToChange.PreVen = articuloData.PreVen;
    articuloToChange.id = articuloData.id;
    articuloToChange.DET_LAR = articuloData.DET_LAR;
    articuloToChange.DetArt = articuloData.DetArt;
    articuloToChange.MKT_DESC = articuloData.MKT_DESC;
  }
}