header-publicidad.component.ts 5.13 KB
import { Component, OnInit, TemplateRef } from '@angular/core';
import { APP_SETTINGS } from 'src/etc/AppSettings';
import { IPublicidad } from 'src/app/interfaces/IPublicidad';
import { PublicidadService } from 'src/app/services/publicidad/publicidad.service';
import { IArticulo } from 'src/app/interfaces/IArticulo';
import { PromocionComponent } from '../promocion/promocion.component';
import { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';
import { ArticuloService } from 'src/app/services/articulo/articulo.service';
import { ConfirmacionComponent } from '../confirmacion/confirmacion.component';
import { SinonimoService } from 'src/app/services/sinonimo/sinonimo.service';
import { ISinonimo } from 'src/app/interfaces/ISinonimo';
import { SinonimoComponent } from '../sinonimo/sinonimo.component';
import * as _ from 'lodash';
import { NoStockComponent } from 'src/app/modules/seleccion-articulos/no-stock/no-stock.component';

@Component({
  selector: 'app-header-publicidad',
  templateUrl: './header-publicidad.component.html',
  styleUrls: ['./header-publicidad.component.scss']
})
export class HeaderPublicidadComponent implements OnInit {
  urlImagenes = `${APP_SETTINGS.apiImagenes}/imagenes/`;
  publicidades: IPublicidad[] = [];
  modalRef: BsModalRef;
  modalSinonimo: BsModalRef;

  constructor(
    private publicidadService: PublicidadService,
    private articuloService: ArticuloService,
    private modalService: BsModalService,
    private sinonimoService: SinonimoService
  ) { }

  ngOnInit() {
    this.getPublicidades();
    this.mediaPantalla();
  }

  getPublicidades() {
    this.publicidadService.getAll()
      .subscribe((res: IPublicidad[]) => {
        this.publicidades = res;
      }, err => console.error(err));
  }

  elegirArticulo(publicidad: IPublicidad) {
    if (publicidad.id_articulo) this.getByID(publicidad.id_articulo);
  }

  getByID(id: number) {
    this.articuloService.getById(id)
      .subscribe((res: IArticulo) => {
        if (res.ExiVta < 1) {
          if (this.modalRef) return;
          this.modalRef = this.modalService.show(NoStockComponent, {
            class: 'modal-dialog-centered',
            backdrop: false,
            ignoreBackdropClick: true,
          });
          this.modalRef.content.onClose
            .subscribe(() => this.modalRef = null);
        } else {
          if (res.FPP) {
            this.openModalPromos(res);
            return;
          } else {
            this.openModalConfirmacion(res);
            return;
          }
        }
      }, err => console.error(err));
  }

  openModalPromos(articulo: IArticulo) {
    if (this.modalRef) return;
    this.modalRef = this.modalService.show(PromocionComponent,
      {
        initialState: {
          idArticulo: articulo.id
        },
        class: 'modal-dialog-centered'
      });
  }

  openModalConfirmacion(articulo: IArticulo) {
    if (this.modalRef) return;
    this.articuloService.setArticulosSinImagen([articulo]);
    this.modalRef = this.modalService.show(ConfirmacionComponent,
      {
        initialState: {
          titleMessage: articulo.DET_LAR,
          imagenPath: articulo.imagenes.length ? articulo.imagenes[0].imagen : 'assets/img/imagen-no-encontrada.jpg',
          footerMessageFirst: `¿QUERÉS AGREGAR ESTE COMBO`,
          footerMessageSecond: `a tu carrito?`,
          footerConfirmation: articulo.PreVen
        },
        ignoreBackdropClick: true,
        class: 'modal-dialog-centered'
      });
    this.modalRef.content.onClose.subscribe((resClose) => {
      this.modalRef = null;
      if (!resClose) return;
      this.sinonimoService.getSinonimos(articulo.CodSec, articulo.CodArt)
        .subscribe((res: ISinonimo[]) => {
          if (res.length) {
            const sinonimos = [];
            const gruposArticulos = _.groupBy(res[0].productos, 'ID_SIN');
            Object.keys(gruposArticulos).forEach((key, i) => {
              sinonimos.push({ productos: gruposArticulos[key], });
              for (const a of articulo.productos) {
                if (key === a.idSinonimo.toString()) {
                  sinonimos[i].cantidad = sinonimos[i].cantidadRestante = a.cantidad;
                  continue;
                }
              }
            });
            res = sinonimos;
            this.openModalSinonimos(res, articulo);
          } else {
            articulo.cantidad = 1;
            this.articuloService.setArticulo(articulo);
          }
        }, err => console.error(err));
    });
    this.mediaPantalla();
  }

  openModalSinonimos(sinonimosData: ISinonimo[], articulo: IArticulo) {
    if (this.modalSinonimo) return;
    this.modalSinonimo = this.modalService.show(SinonimoComponent, {
      initialState: {
        sinonimos: sinonimosData,
        articulo
      },
      class: 'modal-dialog-centered'
    });
    this.modalSinonimo.content.onClose
      .subscribe((res: any) => {
        this.modalSinonimo = null;
        if (!res) return;
        articulo.productos = res.articulos;
        this.articuloService.setArticulo(articulo);
      });
  }

  mediaPantalla() {
    if ($('body').hasClass('media-pantalla')) {
      $('#headerPublicidad,#headerPad').addClass('media-pantalla');
    }
  }
}