promocion.component.ts 3.78 KB
import { Component, OnInit, HostListener } from '@angular/core';
import { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';
import { IArticulo } from 'src/app/interfaces/IArticulo';
import { ArticuloService } from 'src/app/services/articulo/articulo.service';
import { PromocionService } from 'src/app/services/promocion/promocion.service';
import { Subject } from 'rxjs';
import { APP_SETTINGS } from 'src/etc/AppSettings';
import { InactiveScreenService } from 'src/app/services/inactive-screen/inactive-screen.service';
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';

@Component({
  selector: 'app-promocion',
  templateUrl: './promocion.component.html',
  styleUrls: ['./promocion.component.scss']
})
export class PromocionComponent implements OnInit {
  articulosPromo: IArticulo[] = [];
  promociones: IArticulo[] = [];
  onClose: Subject<any>;
  urlImagenes = `${APP_SETTINGS.apiDeboSuite}/imagenes/`;

  constructor(
    public modalPromocion: BsModalRef,
    private modalService: BsModalService,
    private articuloService: ArticuloService,
    private promocionService: PromocionService,
    private sinonimoService: SinonimoService,
    private inactiveScreen: InactiveScreenService,
  ) {
    this.onClose = new Subject();
  }

  ngOnInit() {
    this.getPromociones();
  }

  selectPromo(promo: IArticulo) {
    this.sinonimoService.getSinonimos(promo.CodSec, promo.CodArt)
      .subscribe((res: ISinonimo[]) => {
        if (res.length) {
          const sinonimos = [];
          const gruposArticulos = _.groupBy(res[0].productos, 'ID_SIN');
          Object.keys(gruposArticulos).forEach(key => {
            sinonimos.push({ productos: gruposArticulos[key] });
          });
          res = sinonimos;
          this.openModalSinonimos(res, promo);
        } else {
          promo.cantidad = 1;
          this.articuloService.setArticulo(promo);
          this.modalPromocion.hide();
        }
      }, err => console.error(err));
    this.mediaPantalla();
  }

  openModalSinonimos(sinonimosData: ISinonimo[], articulo: IArticulo) {
    const modalSinonimo = this.modalService.show(SinonimoComponent, {
      initialState: { sinonimos: sinonimosData },
      class: 'modal-promo modal-dialog-centered'
    });

    modalSinonimo.content.onClose
      .subscribe((res: any) => {
        for (const a of articulo.productos) {
          for (const aRes of res.articulos) {
            if (a.idSinonimo === aRes.ID_SIN) {
              a.CODA = aRes.CodArt;
              a.CodArt = aRes.CodArt;
              a.SECA = aRes.CodSec;
              aRes.CodSec = aRes.CodSec;
              a.PreVen = aRes.PreVen;
              a.id = aRes.id;
              a.DET_LAR = aRes.DET_LAR;
              a.DetArt = aRes.DetArt;
            }
          }
        }
        this.articuloService.setArticulo(articulo);
        this.modalPromocion.hide();
      });
  }

  getPromociones() {  
    const sector = this.articulosPromo[0].CodSec;
    const codigo = this.articulosPromo[0].CodArt;
    this.promocionService.getPromociones(sector, codigo)
      .subscribe((res: IArticulo[]) => {
        this.promociones = res;
      }, error => { console.error(error); });
  }

  @HostListener('document:click', ['$event'])
  eventListener(event: Event) {
    clearTimeout(this.inactiveScreen.timerReposo);
    this.inactiveScreen.startTimeOutInactividad();
  }

  @HostListener('scroll', ['$event'])
  scrollEvent(event: Event) {
    clearTimeout(this.inactiveScreen.timerReposo);
    this.inactiveScreen.startTimeOutInactividad();
  }

  mediaPantalla() {
    if ($('body').hasClass('media-pantalla')) {
      $('.modal-content').addClass('media-pantalla');
    }
  }
}