Removed IsModifierCompulsory from MenuCategory as it is now not needed and minimum in ModifierCategory set to non-zero to achieve the same.

Fix: DiscountLimit was not scaled to 100 in MenuCategory detail. So it is now chaled in the json and scaled back in the frontend for the list as that was not supposed to be scaled.
Feature: Modifier is now done
Fix: In product save, it was checking menu_category second time again instead of sale_category
This commit is contained in:
Amritanshu
2019-06-22 08:49:33 +05:30
parent e13ed38640
commit 20801afc8a
40 changed files with 821 additions and 144 deletions
@@ -0,0 +1,48 @@
import { DataSource } from '@angular/cdk/collections';
import { map, tap } from 'rxjs/operators';
import { merge, Observable } from 'rxjs';
import { Modifier } from '../../core/modifier';
export class ModifierListDataSource extends DataSource<Modifier> {
public data: Modifier[];
public viewData: Modifier[];
private filterValue: string;
constructor(private readonly filter: Observable<string>, private readonly dataObs: Observable<Modifier[]>) {
super();
this.data = [];
this.viewData = [];
this.filter = filter.pipe(
tap(x => this.filterValue = x)
);
this.dataObs = dataObs.pipe(
tap(x => this.data = x)
);
}
connect(): Observable<Modifier[]> {
const dataMutations = [
this.dataObs,
this.filter
];
return merge(...dataMutations).pipe(
map((x: any) => {
this.viewData = this.getFilteredData([...this.data]);
return this.viewData;
})
);
}
disconnect() {
}
private getFilteredData(data: Modifier[]): Modifier[] {
const filter = (this.filterValue === undefined) ? "" : this.filterValue;
return data.filter(x => {
return x.modifierCategory.id === filter || filter === "";
}
);
}
}
@@ -0,0 +1,64 @@
<mat-card>
<mat-card-title-group>
<mat-card-title>Modifiers</mat-card-title>
<a mat-button [routerLink]="['/modifiers', 'new']">
<mat-icon>add_box</mat-icon>
Add
</a>
</mat-card-title-group>
<mat-card-content>
<form [formGroup]="form" fxLayout="column">
<div fxLayout="row" fxLayoutAlign="space-around start" fxLayout.lt-md="column" fxLayoutGap="20px"
fxLayoutGap.lt-md="0px">
<mat-form-field fxFlex>
<mat-label>Modifier Category</mat-label>
<mat-select placeholder="Modifier Category" formControlName="modifierCategory" (selectionChange)="filterOn($event)">
<mat-option>-- All Categories --</mat-option>
<mat-option *ngFor="let mc of modifierCategories" [value]="mc.id">
{{ mc.name }}
</mat-option>
</mat-select>
</mat-form-field>
</div>
</form>
<mat-table #table [dataSource]="dataSource" aria-label="Elements">
<!-- Name Column -->
<ng-container matColumnDef="name">
<mat-header-cell *matHeaderCellDef>Name</mat-header-cell>
<mat-cell *matCellDef="let row"><a [routerLink]="['/modifiers', row.id]">{{row.name}} ({{row.units}})</a></mat-cell>
</ng-container>
<!-- Show In Bill Column -->
<ng-container matColumnDef="showInBill">
<mat-header-cell *matHeaderCellDef>Show</mat-header-cell>
<mat-cell *matCellDef="let row">
<div layout="row">
<div flex>
<mat-icon>
{{ row.showInBill ? "visibility" : "visibility_off" }}
</mat-icon>
<b> {{ row.showInBill ? "Show" : "Hide" }}</b>
</div>
</div>
</mat-cell>
</ng-container>
<!-- Price Column -->
<ng-container matColumnDef="price">
<mat-header-cell *matHeaderCellDef>Price</mat-header-cell>
<mat-cell *matCellDef="let row">{{row.price | currency:'INR'}}</mat-cell>
</ng-container>
<!-- Modifier Category Column -->
<ng-container matColumnDef="modifierCategory">
<mat-header-cell *matHeaderCellDef>Category</mat-header-cell>
<mat-cell *matCellDef="let row">{{row.modifierCategory.name}}</mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
</mat-table>
</mat-card-content>
</mat-card>
@@ -0,0 +1,23 @@
import {ComponentFixture, fakeAsync, TestBed} from '@angular/core/testing';
import {ModifierListComponent} from './modifier-list.component';
describe('ModifierListComponent', () => {
let component: ModifierListComponent;
let fixture: ComponentFixture<ModifierListComponent>;
beforeEach(fakeAsync(() => {
TestBed.configureTestingModule({
declarations: [ModifierListComponent]
})
.compileComponents();
fixture = TestBed.createComponent(ModifierListComponent);
component = fixture.componentInstance;
fixture.detectChanges();
}));
it('should compile', () => {
expect(component).toBeTruthy();
});
});
@@ -0,0 +1,53 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { FormBuilder, FormGroup } from '@angular/forms';
import { ModifierListDataSource } from './modifier-list-datasource';
import { MatTable } from "@angular/material";
import { Modifier } from '../../core/modifier';
import { BehaviorSubject } from "rxjs";
import {ModifierCategory} from "../../core/modifier-category";
@Component({
selector: 'app-modifier-list',
templateUrl: './modifier-list.component.html',
styleUrls: ['./modifier-list.component.css']
})
export class ModifierListComponent implements OnInit {
@ViewChild('table', { static: true }) table: MatTable<Modifier>;
dataSource: ModifierListDataSource;
filter: BehaviorSubject<string>;
form: FormGroup;
list: Modifier[];
data: BehaviorSubject<Modifier[]>;
modifierCategories: ModifierCategory[];
/** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */
displayedColumns: string[] = ['name', 'showInBill', 'price', 'modifierCategory'];
constructor(
private route: ActivatedRoute,
private fb: FormBuilder,
private router: Router
) {
this.form = this.fb.group({
modifierCategory: ''
});
this.filter = new BehaviorSubject("");
this.data = new BehaviorSubject([]);
this.data.subscribe((data: Modifier[]) => {
this.list = data;
})
}
filterOn(val: any) {
this.filter.next(val.value);
}
ngOnInit() {
this.route.data
.subscribe((data: { list: Modifier[], modifierCategories: ModifierCategory[] }) => {
this.data.next(data.list);
this.modifierCategories = data.modifierCategories;
});
this.dataSource = new ModifierListDataSource(this.filter, this.data);
}
}