Fix: Accidentally used menu category instead of sale category

This commit is contained in:
2026-02-14 06:00:09 +00:00
parent 061dd1310d
commit c9fa83e8ac
8 changed files with 33 additions and 34 deletions

View File

@ -18,7 +18,7 @@ from ...models.stock_keeping_unit import StockKeepingUnit
from ...models.voucher import Voucher from ...models.voucher import Voucher
from ...models.voucher_type import VoucherType from ...models.voucher_type import VoucherType
from ...schemas.beer_consumption_report import BeerConsumptionReport, BeerConsumptionReportItem from ...schemas.beer_consumption_report import BeerConsumptionReport, BeerConsumptionReportItem
from ...schemas.menu_category import MenuCategoryLink from ...schemas.sale_category import SaleCategoryLink
from ...schemas.user_token import UserToken from ...schemas.user_token import UserToken
from .. import _pv_onclause, _sv_onclause from .. import _pv_onclause, _sv_onclause
from . import check_audit_permission, report_finish_date, report_start_date from . import check_audit_permission, report_finish_date, report_start_date
@ -31,7 +31,7 @@ router = APIRouter()
def beer_consumption( def beer_consumption(
start_date: date = Depends(report_start_date), start_date: date = Depends(report_start_date),
finish_date: date = Depends(report_finish_date), finish_date: date = Depends(report_finish_date),
m: uuid.UUID | None = None, # Menu Category sc: uuid.UUID | None = None, # Sale Category
r: bool | None = True, r: bool | None = True,
h: bool | None = True, h: bool | None = True,
st: bool | None = True, st: bool | None = True,
@ -51,7 +51,6 @@ def beer_consumption(
.join(Kot.inventories) .join(Kot.inventories)
.join(Inventory.sku) .join(Inventory.sku)
.join(SkuVersion, onclause=sku_version_onclause) .join(SkuVersion, onclause=sku_version_onclause)
.join(SkuVersion.menu_category)
.join(StockKeepingUnit.product) .join(StockKeepingUnit.product)
.join(ProductVersion, onclause=product_version_onclause) .join(ProductVersion, onclause=product_version_onclause)
.where( .where(
@ -60,8 +59,8 @@ def beer_consumption(
day <= finish_date, day <= finish_date,
) )
) )
if m: if sc:
query = query.where(SkuVersion.menu_category_id == m) query = query.where(ProductVersion.sale_category_id == sc)
if h is False and r is not False: if h is False and r is not False:
query = query.where(Inventory.is_happy_hour == h) query = query.where(Inventory.is_happy_hour == h)
if r is False and h is not False: if r is False and h is not False:
@ -96,7 +95,7 @@ def beer_consumption(
return BeerConsumptionReport( return BeerConsumptionReport(
start_date=start_date, start_date=start_date,
finish_date=finish_date, finish_date=finish_date,
menu_category=MenuCategoryLink(id_=m, name="", skus=[]) if m else None, sale_category=SaleCategoryLink(id_=sc, name="") if sc else None,
regular=r, regular=r,
happy=h, happy=h,
staff=st, staff=st,

View File

@ -13,7 +13,7 @@ from pydantic import (
) )
from . import Daf, to_camel from . import Daf, to_camel
from .menu_category import MenuCategoryLink from .sale_category import SaleCategoryLink
class BeerConsumptionReportItem(BaseModel): class BeerConsumptionReportItem(BaseModel):
@ -57,7 +57,7 @@ class BeerConsumptionReportItem(BaseModel):
class BeerConsumptionReport(BaseModel): class BeerConsumptionReport(BaseModel):
start_date: date start_date: date
finish_date: date finish_date: date
menu_category: MenuCategoryLink | None sale_category: SaleCategoryLink | None
regular: bool | None regular: bool | None
happy: bool | None happy: bool | None
staff: bool | None staff: bool | None

View File

@ -32,11 +32,11 @@
<mat-datepicker #finishDate></mat-datepicker> <mat-datepicker #finishDate></mat-datepicker>
</mat-form-field> </mat-form-field>
<mat-form-field class="flex-auto"> <mat-form-field class="flex-auto">
<mat-label>Menu Category</mat-label> <mat-label>Sale Category</mat-label>
<mat-select formControlName="menuCategory" (selectionChange)="filterOn($event.value)"> <mat-select formControlName="saleCategory" (selectionChange)="filterOn($event.value)">
@for (mc of menuCategories; track mc) { @for (sc of saleCategories; track sc) {
<mat-option [value]="mc.id"> <mat-option [value]="sc.id">
{{ mc.name }} {{ sc.name }}
</mat-option> </mat-option>
} }
</mat-select> </mat-select>

View File

@ -12,7 +12,7 @@ import { MatTableModule } from '@angular/material/table';
import { ActivatedRoute, Router } from '@angular/router'; import { ActivatedRoute, Router } from '@angular/router';
import moment from 'moment'; import moment from 'moment';
import { MenuCategory } from '../core/menu-category'; import { SaleCategory } from '../core/sale-category';
import { ToCsvService } from '../shared/to-csv.service'; import { ToCsvService } from '../shared/to-csv.service';
import { BeerSaleExportHeaderInterface } from './beer-sale-export-header-interface'; import { BeerSaleExportHeaderInterface } from './beer-sale-export-header-interface';
import { BeerSaleReport } from './beer-sale-report'; import { BeerSaleReport } from './beer-sale-report';
@ -40,13 +40,13 @@ export class BeerSaleReportComponent implements OnInit {
private router = inject(Router); private router = inject(Router);
private toCsv = inject(ToCsvService); private toCsv = inject(ToCsvService);
menuCategories: MenuCategory[] = []; saleCategories: SaleCategory[] = [];
info: BeerSaleReport = new BeerSaleReport(); info: BeerSaleReport = new BeerSaleReport();
dataSource: BeerSaleReportDataSource = new BeerSaleReportDataSource(this.info.data); dataSource: BeerSaleReportDataSource = new BeerSaleReportDataSource(this.info.data);
form: FormGroup<{ form: FormGroup<{
startDate: FormControl<Date>; startDate: FormControl<Date>;
finishDate: FormControl<Date>; finishDate: FormControl<Date>;
menuCategory: FormControl<string>; saleCategory: FormControl<string>;
regular: FormControl<boolean>; regular: FormControl<boolean>;
happy: FormControl<boolean>; happy: FormControl<boolean>;
staff: FormControl<boolean>; staff: FormControl<boolean>;
@ -61,7 +61,7 @@ export class BeerSaleReportComponent implements OnInit {
this.form = new FormGroup({ this.form = new FormGroup({
startDate: new FormControl(new Date(), { nonNullable: true }), startDate: new FormControl(new Date(), { nonNullable: true }),
finishDate: new FormControl(new Date(), { nonNullable: true }), finishDate: new FormControl(new Date(), { nonNullable: true }),
menuCategory: new FormControl('', { nonNullable: true }), saleCategory: new FormControl('', { nonNullable: true }),
regular: new FormControl<boolean>(true, { nonNullable: true }), regular: new FormControl<boolean>(true, { nonNullable: true }),
happy: new FormControl<boolean>(true, { nonNullable: true }), happy: new FormControl<boolean>(true, { nonNullable: true }),
staff: new FormControl<boolean>(true, { nonNullable: true }), staff: new FormControl<boolean>(true, { nonNullable: true }),
@ -71,14 +71,14 @@ export class BeerSaleReportComponent implements OnInit {
ngOnInit() { ngOnInit() {
this.route.data.subscribe((value) => { this.route.data.subscribe((value) => {
const data = value as { info: BeerSaleReport; menuCategories: MenuCategory[] }; const data = value as { info: BeerSaleReport; saleCategories: SaleCategory[] };
this.info = data.info; this.info = data.info;
this.menuCategories = data.menuCategories; this.saleCategories = data.saleCategories;
this.displayedColumns = ['date'].concat(this.info.headers); this.displayedColumns = ['date'].concat(this.info.headers);
this.form.setValue({ this.form.setValue({
startDate: moment(this.info.startDate, 'DD-MMM-YYYY').toDate(), startDate: moment(this.info.startDate, 'DD-MMM-YYYY').toDate(),
finishDate: moment(this.info.finishDate, 'DD-MMM-YYYY').toDate(), finishDate: moment(this.info.finishDate, 'DD-MMM-YYYY').toDate(),
menuCategory: this.info.menuCategory?.id ?? '', saleCategory: this.info.saleCategory?.id ?? '',
regular: this.info.regular, regular: this.info.regular,
happy: this.info.happy, happy: this.info.happy,
staff: this.info.staff, staff: this.info.staff,
@ -94,7 +94,7 @@ export class BeerSaleReportComponent implements OnInit {
queryParams: { queryParams: {
startDate: info.startDate, startDate: info.startDate,
finishDate: info.finishDate, finishDate: info.finishDate,
menuCategory: info.menuCategory?.id ?? '', saleCategory: info.saleCategory?.id ?? '',
regular: info.regular, regular: info.regular,
happy: info.happy, happy: info.happy,
staff: info.staff, staff: info.staff,
@ -104,8 +104,8 @@ export class BeerSaleReportComponent implements OnInit {
} }
filterOn(id: string) { filterOn(id: string) {
const mc = this.menuCategories.find((x) => x.id === id); const sc = this.saleCategories.find((x) => x.id === id);
this.info.menuCategory = mc ? mc : new MenuCategory({ id }); this.info.saleCategory = sc ? sc : new SaleCategory({ id });
} }
getInfo(): BeerSaleReport { getInfo(): BeerSaleReport {
@ -114,7 +114,7 @@ export class BeerSaleReportComponent implements OnInit {
return new BeerSaleReport({ return new BeerSaleReport({
startDate: moment(formModel.startDate).format('DD-MMM-YYYY'), startDate: moment(formModel.startDate).format('DD-MMM-YYYY'),
finishDate: moment(formModel.finishDate).format('DD-MMM-YYYY'), finishDate: moment(formModel.finishDate).format('DD-MMM-YYYY'),
menuCategory: this.info.menuCategory, saleCategory: this.info.saleCategory,
regular: formModel.regular, regular: formModel.regular,
happy: formModel.happy, happy: formModel.happy,
staff: formModel.staff, staff: formModel.staff,

View File

@ -7,10 +7,10 @@ import { BeerSaleReportService } from './beer-sale-report.service';
export const beerSaleReportResolver: ResolveFn<BeerSaleReport> = (route) => { export const beerSaleReportResolver: ResolveFn<BeerSaleReport> = (route) => {
const startDate = route.queryParamMap.get('startDate') ?? null; const startDate = route.queryParamMap.get('startDate') ?? null;
const finishDate = route.queryParamMap.get('finishDate') ?? null; const finishDate = route.queryParamMap.get('finishDate') ?? null;
const menuCategory = route.queryParamMap.get('menuCategory') ?? null; const saleCategory = route.queryParamMap.get('saleCategory') ?? null;
const regular = route.queryParamMap.get('regular') !== 'false'; const regular = route.queryParamMap.get('regular') !== 'false';
const happy = route.queryParamMap.get('happy') !== 'false'; const happy = route.queryParamMap.get('happy') !== 'false';
const staff = route.queryParamMap.get('staff') !== 'false'; const staff = route.queryParamMap.get('staff') !== 'false';
const nc = route.queryParamMap.get('nc') !== 'false'; const nc = route.queryParamMap.get('nc') !== 'false';
return inject(BeerSaleReportService).get(startDate, finishDate, menuCategory, regular, happy, staff, nc); return inject(BeerSaleReportService).get(startDate, finishDate, saleCategory, regular, happy, staff, nc);
}; };

View File

@ -1,7 +1,7 @@
import { Routes } from '@angular/router'; import { Routes } from '@angular/router';
import { authGuard } from '../auth/auth-guard.service'; import { authGuard } from '../auth/auth-guard.service';
import { menuCategoryListResolver } from '../menu-category/menu-category-list.resolver'; import { saleCategoryListResolver } from '../sale-category/sale-category-list.resolver';
import { BeerSaleReportComponent } from './beer-sale-report.component'; import { BeerSaleReportComponent } from './beer-sale-report.component';
import { beerSaleReportResolver } from './beer-sale-report.resolver'; import { beerSaleReportResolver } from './beer-sale-report.resolver';
@ -15,7 +15,7 @@ export const routes: Routes = [
}, },
resolve: { resolve: {
info: beerSaleReportResolver, info: beerSaleReportResolver,
menuCategories: menuCategoryListResolver, saleCategories: saleCategoryListResolver,
}, },
runGuardsAndResolvers: 'always', runGuardsAndResolvers: 'always',
}, },

View File

@ -19,7 +19,7 @@ export class BeerSaleReportService {
get( get(
startDate: string | null, startDate: string | null,
finishDate: string | null, finishDate: string | null,
menuCategory: string | null, saleCategory: string | null,
regular: boolean, regular: boolean,
happy: boolean, happy: boolean,
staff: boolean, staff: boolean,
@ -32,8 +32,8 @@ export class BeerSaleReportService {
if (finishDate !== null) { if (finishDate !== null) {
options.params = options.params.set('f', finishDate); options.params = options.params.set('f', finishDate);
} }
if (menuCategory != null) { if (saleCategory != null) {
options.params = options.params.set('m', menuCategory); options.params = options.params.set('sc', saleCategory);
} }
options.params = options.params.set('r', regular); options.params = options.params.set('r', regular);
options.params = options.params.set('h', happy); options.params = options.params.set('h', happy);

View File

@ -1,10 +1,10 @@
import { MenuCategory } from '../core/menu-category'; import { SaleCategory } from '../core/sale-category';
import { BeerSaleReportItem } from './beer-sale-report-item'; import { BeerSaleReportItem } from './beer-sale-report-item';
export class BeerSaleReport { export class BeerSaleReport {
startDate: string; startDate: string;
finishDate: string; finishDate: string;
menuCategory: MenuCategory; saleCategory: SaleCategory;
regular: boolean; regular: boolean;
happy: boolean; happy: boolean;
staff: boolean; staff: boolean;
@ -15,7 +15,7 @@ export class BeerSaleReport {
public constructor(init?: Partial<BeerSaleReport>) { public constructor(init?: Partial<BeerSaleReport>) {
this.startDate = ''; this.startDate = '';
this.finishDate = ''; this.finishDate = '';
this.menuCategory = new MenuCategory(); this.saleCategory = new SaleCategory();
this.regular = true; this.regular = true;
this.happy = true; this.happy = true;
this.staff = true; this.staff = true;