2019-07-11 06:47:41 +00:00
|
|
|
import { Injectable } from '@angular/core';
|
2019-07-12 07:06:38 +00:00
|
|
|
import { MatDialog } from '@angular/material';
|
2019-07-13 16:02:18 +00:00
|
|
|
import { BehaviorSubject } from 'rxjs';
|
2019-07-11 06:47:41 +00:00
|
|
|
import { Product } from '../core/product';
|
|
|
|
import { ModifiersComponent } from './modifiers/modifiers.component';
|
|
|
|
import { ModifierCategoryService } from '../modifier-categories/modifier-category.service';
|
2019-07-13 16:02:18 +00:00
|
|
|
import { ModifierCategory } from '../core/modifier-category';
|
|
|
|
import { Bill, Inventory, Kot, PrintType } from './bills/bill';
|
|
|
|
import {VoucherService} from './bills/voucher.service';
|
2019-07-11 06:47:41 +00:00
|
|
|
|
|
|
|
@Injectable()
|
|
|
|
export class BillService {
|
2019-07-12 07:06:38 +00:00
|
|
|
public dataObs;
|
|
|
|
public data;
|
2019-07-13 16:02:18 +00:00
|
|
|
private bill;
|
2019-07-12 07:06:38 +00:00
|
|
|
|
2019-07-11 06:47:41 +00:00
|
|
|
constructor(
|
2019-07-12 07:06:38 +00:00
|
|
|
private dialog: MatDialog,
|
2019-07-13 16:02:18 +00:00
|
|
|
private ser: VoucherService,
|
2019-07-11 06:47:41 +00:00
|
|
|
private modifierCategoryService: ModifierCategoryService
|
2019-07-12 07:06:38 +00:00
|
|
|
) {
|
|
|
|
this.data = [];
|
|
|
|
this.dataObs = new BehaviorSubject<any[]>(this.data);
|
|
|
|
}
|
2019-07-11 06:47:41 +00:00
|
|
|
|
2019-07-13 16:02:18 +00:00
|
|
|
loadData(bill: Bill): void {
|
|
|
|
this.bill = bill;
|
|
|
|
const view = this.bill.kots.map(k => {
|
|
|
|
return [{
|
|
|
|
isKot: true,
|
|
|
|
info: `Kot: ${k.code} / ${k.date} (${k.user.name}) `
|
|
|
|
}, ...k.inventories.map(i => {
|
|
|
|
return {
|
|
|
|
id: i.id,
|
|
|
|
isKot: false,
|
|
|
|
product: i.product,
|
|
|
|
productId: i.product.id,
|
|
|
|
isHappyHour: i.isHappyHour,
|
|
|
|
isPrinted: true,
|
|
|
|
info: `${i.product.name} (${i.product.units}) @ ${i.price}`,
|
|
|
|
quantity: i.quantity,
|
|
|
|
discount: i.discount,
|
|
|
|
taxRate: i.taxRate,
|
|
|
|
tax: i.tax,
|
|
|
|
modifiers: i.modifiers
|
|
|
|
};
|
|
|
|
})];
|
|
|
|
});
|
|
|
|
this.data = view.reduce((a, c) => a.concat(c) , []);
|
|
|
|
this.data.push({isKot: true, newKot: true, info: '== New Kot =='});
|
2019-07-12 07:06:38 +00:00
|
|
|
this.dataObs.next(this.data);
|
|
|
|
|
|
|
|
}
|
|
|
|
addProduct(product: Product): void {
|
2019-07-13 16:02:18 +00:00
|
|
|
const old = this.data.find(x => !x.isKot && x.productId === product.id && x.isHappyHour === product.hasHappyHour);
|
2019-07-12 07:06:38 +00:00
|
|
|
if (old !== undefined) {
|
|
|
|
old.quantity += 1;
|
|
|
|
} else {
|
2019-07-13 16:02:18 +00:00
|
|
|
const item = {
|
2019-07-12 07:06:38 +00:00
|
|
|
isKot: false,
|
|
|
|
product: product,
|
|
|
|
productId: product.id,
|
|
|
|
isHappyHour: product.hasHappyHour,
|
|
|
|
info: `${product.name} (${product.units}) @ ${product.price}`,
|
2019-07-13 16:02:18 +00:00
|
|
|
price: product.price,
|
2019-07-12 07:06:38 +00:00
|
|
|
quantity: 1,
|
2019-07-13 16:02:18 +00:00
|
|
|
discount: 0,
|
|
|
|
taxRate: product.saleCategory.tax.rate,
|
|
|
|
tax: product.saleCategory.tax,
|
2019-07-12 07:06:38 +00:00
|
|
|
modifiers: []
|
|
|
|
};
|
|
|
|
this.data.push(item);
|
|
|
|
this.modifierCategoryService.listIsActiveOfProduct(product.id).subscribe(result => {
|
|
|
|
if (result.reduce((a: any, c: ModifierCategory) => {
|
2019-07-13 16:02:18 +00:00
|
|
|
return a + c.minimum;
|
2019-07-12 07:06:38 +00:00
|
|
|
}, 0)) {
|
|
|
|
this.showModifier(item);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2019-07-11 06:47:41 +00:00
|
|
|
this.dataObs.next(this.data);
|
|
|
|
}
|
|
|
|
|
|
|
|
showModifier(item: any): void {
|
|
|
|
// [routerLink]="['/sales', 'modifiers', item.id]"
|
|
|
|
const dialogRef = this.dialog.open(ModifiersComponent, {
|
|
|
|
position: {
|
|
|
|
top: '10vh'
|
|
|
|
},
|
|
|
|
data: {
|
|
|
|
list: this.modifierCategoryService.listIsActiveOfProduct(item.productId),
|
|
|
|
selected: item.modifiers
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
dialogRef.afterClosed().subscribe(result => {
|
2019-07-12 07:06:38 +00:00
|
|
|
if (result !== undefined) {
|
2019-07-11 06:47:41 +00:00
|
|
|
item.modifiers = result;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
addOne(item: any): void {
|
|
|
|
item.quantity += 1;
|
|
|
|
this.dataObs.next(this.data);
|
|
|
|
}
|
|
|
|
|
2019-07-13 16:02:18 +00:00
|
|
|
quantity(item: any, quantity: number): void {
|
|
|
|
item.quantity = quantity;
|
|
|
|
this.dataObs.next(this.data);
|
2019-07-11 06:47:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
subtractOne(item: any): void {
|
|
|
|
if (item.quantity > 1) {
|
|
|
|
item.quantity -= 1;
|
|
|
|
this.dataObs.next(this.data);
|
|
|
|
} else if (item.quantity === 0) {
|
|
|
|
this.removeItem(item);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
removeItem(item: any): void {
|
|
|
|
this.data.splice(this.data.indexOf(item), 1);
|
|
|
|
this.dataObs.next(this.data);
|
|
|
|
}
|
|
|
|
|
|
|
|
modifier(item: any): void {
|
|
|
|
this.showModifier(item);
|
|
|
|
}
|
|
|
|
|
2019-07-13 16:02:18 +00:00
|
|
|
printKot(guest_book_id: string): void {
|
|
|
|
const nk = new Kot({
|
|
|
|
inventories: this.data.filter(x => !x.isKot && !x.isPrinted).map(y => new Inventory({
|
|
|
|
product: y.product,
|
|
|
|
quantity: y.quantity,
|
|
|
|
price: y.price,
|
|
|
|
isHappyHour: y.isHappyHour,
|
|
|
|
discount: y.discount,
|
|
|
|
modifiers: y.modifiers,
|
|
|
|
taxRate: y.taxRate,
|
|
|
|
tax: y.tax
|
|
|
|
}))
|
|
|
|
});
|
|
|
|
let item = JSON.parse(JSON.stringify(this.bill))
|
|
|
|
item.kots.push(nk);
|
|
|
|
this.ser.saveOrUpdate(item, PrintType.Kot, guest_book_id, true).subscribe(x =>
|
|
|
|
console.log(x)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
printBill(): boolean {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2019-07-11 06:47:41 +00:00
|
|
|
}
|