diff --git a/backend/WebApi/Lunchorder.Api/Controllers/AccountController.cs b/backend/WebApi/Lunchorder.Api/Controllers/AccountController.cs index 205f56b..dd41b6d 100644 --- a/backend/WebApi/Lunchorder.Api/Controllers/AccountController.cs +++ b/backend/WebApi/Lunchorder.Api/Controllers/AccountController.cs @@ -1,10 +1,12 @@ using System; +using System.Collections.Generic; using System.Net; using System.Security.Claims; using System.Threading.Tasks; using System.Web.Http; using Lunchorder.Common.Interfaces; using Lunchorder.Domain.Constants; +using Lunchorder.Domain.Dtos; using Lunchorder.Domain.Dtos.Responses; using Microsoft.AspNet.Identity; using Swashbuckle.Swagger.Annotations; @@ -40,6 +42,24 @@ public async Task Get() return Ok(await _accountControllerService.GetUserInfo(claimsIdentity)); } + /// + /// Gets the last 5 orders for a user + /// + /// + [Route("last5Orders")] + [HttpGet] + [Authorize] + [SwaggerResponse(HttpStatusCode.OK, Type = typeof(IEnumerable))] + public async Task GetLast5Orders() + { + var claimsIdentity = User.Identity as ClaimsIdentity; + + if (claimsIdentity == null) + return InternalServerError(); + + return Ok(await _accountControllerService.GetLast5Orders(claimsIdentity)); + } + /// /// Gets all the users of the platform /// diff --git a/backend/WebApi/Lunchorder.Api/Controllers/MenuController.cs b/backend/WebApi/Lunchorder.Api/Controllers/MenuController.cs index f086813..3efea60 100644 --- a/backend/WebApi/Lunchorder.Api/Controllers/MenuController.cs +++ b/backend/WebApi/Lunchorder.Api/Controllers/MenuController.cs @@ -51,7 +51,7 @@ public async Task Post(PostMenuRequest postMenuRequest) /// [Route("")] [HttpPut] - [SwaggerResponse(HttpStatusCode.OK)] + [SwaggerResponse(HttpStatusCode.OK, Type = typeof(Domain.Dtos.Menu))] public async Task Put(PutMenuRequest putMenuRequest) { await _menuControllerService.Update(putMenuRequest.Menu); @@ -65,7 +65,7 @@ public async Task Put(PutMenuRequest putMenuRequest) /// [Route("active/{menuId}")] [HttpPost] - [SwaggerResponse(HttpStatusCode.OK)] + [SwaggerResponse(HttpStatusCode.OK, Type = typeof(Domain.Dtos.Menu))] public async Task SetActive(string menuId) { // todo, only authorize admin diff --git a/backend/WebApi/Lunchorder.Common/ControllerServices/AccountControllerService.cs b/backend/WebApi/Lunchorder.Common/ControllerServices/AccountControllerService.cs index 8061280..d5eb976 100644 --- a/backend/WebApi/Lunchorder.Common/ControllerServices/AccountControllerService.cs +++ b/backend/WebApi/Lunchorder.Common/ControllerServices/AccountControllerService.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Lunchorder.Common.Extensions; using Lunchorder.Common.Interfaces; +using Lunchorder.Domain.Dtos; using Lunchorder.Domain.Dtos.Responses; using Microsoft.AspNet.Identity; @@ -73,5 +74,11 @@ public async Task GetAllUsers() var users = await _databaseRepository.GetUsers(); return new GetAllUsersResponse() { Users = users }; } + + public async Task> GetLast5Orders(ClaimsIdentity claimsIdentity) + { + var userInfo = await _databaseRepository.GetUserInfo(claimsIdentity.GetUserName()); + return userInfo.Last5Orders; + } } } \ No newline at end of file diff --git a/backend/WebApi/Lunchorder.Common/ControllerServices/OrderControllerService.cs b/backend/WebApi/Lunchorder.Common/ControllerServices/OrderControllerService.cs index 258fcc0..9167fbf 100644 --- a/backend/WebApi/Lunchorder.Common/ControllerServices/OrderControllerService.cs +++ b/backend/WebApi/Lunchorder.Common/ControllerServices/OrderControllerService.cs @@ -6,6 +6,7 @@ using Lunchorder.Domain.Constants; using Lunchorder.Domain.Dtos; using Lunchorder.Domain.Entities.Eventing; +using Lunchorder.Domain.Exceptions; using Newtonsoft.Json; using Menu = Lunchorder.Domain.Dtos.Menu; using UserOrderHistory = Lunchorder.Domain.Dtos.UserOrderHistory; @@ -47,13 +48,37 @@ public Task Delete(Guid orderId) public async Task Add(string userId, string userName, IEnumerable menuOrders) { - var vendorId = await GetVendorId(); - var menuOrderHistoryEntries = _mapper.Map, IEnumerable>(menuOrders); + var menu = await GetMenu(); + + if (!string.IsNullOrEmpty(menu.Vendor.SubmitOrderTime)) + { + DateTime parsedOrderDateTime; + if (DateTime.TryParse(menu.Vendor.SubmitOrderTime, out parsedOrderDateTime)) + { + if (TimeSpan.Compare(parsedOrderDateTime.TimeOfDay, DateTime.UtcNow.TimeOfDay) <= 0) + { + throw new BusinessException($"Sorry, you were too late to submit your order for today"); + } + } + } + else + { + var menuOrderHistoryEntries = + _mapper.Map, IEnumerable>(menuOrders); - var userOrderHistory = new UserOrderHistory { Id = Guid.NewGuid(), OrderTime = DateTime.UtcNow, Entries = menuOrderHistoryEntries }; + var userOrderHistory = new UserOrderHistory + { + Id = Guid.NewGuid(), + OrderTime = DateTime.UtcNow, + Entries = menuOrderHistoryEntries + }; - await _databaseRepository.AddOrder(userId, userName, vendorId, new DateGenerator().GenerateDateFormat(DateTime.UtcNow), userOrderHistory); - _eventingService.SendMessage(new Message(ServicebusType.AddUserOrder, JsonConvert.SerializeObject(userOrderHistory))); + await + _databaseRepository.AddOrder(userId, userName, menu.Vendor.Id, + new DateGenerator().GenerateDateFormat(DateTime.UtcNow), userOrderHistory); + _eventingService.SendMessage(new Message(ServicebusType.AddUserOrder, + JsonConvert.SerializeObject(userOrderHistory))); + } } public async Task GetEmailVendorHistory(DateTime dateTime) diff --git a/backend/WebApi/Lunchorder.Common/Interfaces/IAccountControllerService.cs b/backend/WebApi/Lunchorder.Common/Interfaces/IAccountControllerService.cs index 6a731bd..a3a7685 100644 --- a/backend/WebApi/Lunchorder.Common/Interfaces/IAccountControllerService.cs +++ b/backend/WebApi/Lunchorder.Common/Interfaces/IAccountControllerService.cs @@ -1,5 +1,7 @@ +using System.Collections.Generic; using System.Security.Claims; using System.Threading.Tasks; +using Lunchorder.Domain.Dtos; using Lunchorder.Domain.Dtos.Responses; namespace Lunchorder.Common.Interfaces @@ -8,5 +10,6 @@ public interface IAccountControllerService { Task GetUserInfo(ClaimsIdentity claimsIdentity); Task GetAllUsers(); + Task> GetLast5Orders(ClaimsIdentity claimsIdentity); } } \ No newline at end of file diff --git a/backend/WebApi/Lunchorder.Common/Interfaces/IDatabaseRepository.cs b/backend/WebApi/Lunchorder.Common/Interfaces/IDatabaseRepository.cs index a9bbb1c..204eb95 100644 --- a/backend/WebApi/Lunchorder.Common/Interfaces/IDatabaseRepository.cs +++ b/backend/WebApi/Lunchorder.Common/Interfaces/IDatabaseRepository.cs @@ -8,7 +8,7 @@ namespace Lunchorder.Common.Interfaces { public interface IDatabaseRepository { - Task GetUserInfo(string userId); + Task GetUserInfo(string userName); Task> GetBadges(); Task AddMenu(Menu menu); Task GetEnabledMenu(); diff --git a/backend/WebApi/Lunchorder.Dal/Seed/Stored Procedures/addUserOrder.js b/backend/WebApi/Lunchorder.Dal/Seed/Stored Procedures/addUserOrder.js index 9504a75..ee239c4 100644 --- a/backend/WebApi/Lunchorder.Dal/Seed/Stored Procedures/addUserOrder.js +++ b/backend/WebApi/Lunchorder.Dal/Seed/Stored Procedures/addUserOrder.js @@ -29,7 +29,7 @@ function updateUserOrders(userDocument) { // we only keep track of the last 10 orders for a user if (userDocument.Last5Orders && userDocument.Last5Orders.length >= 5) { - userDocument.shift(); + userDocument.Last5Orders.shift(); } // insert at beginning diff --git a/backend/WebApi/Lunchorder.Domain/Dtos/LastOrder.cs b/backend/WebApi/Lunchorder.Domain/Dtos/LastOrder.cs index 517f05e..c7702ba 100644 --- a/backend/WebApi/Lunchorder.Domain/Dtos/LastOrder.cs +++ b/backend/WebApi/Lunchorder.Domain/Dtos/LastOrder.cs @@ -8,8 +8,6 @@ namespace Lunchorder.Domain.Dtos /// public class LastOrder { - private IEnumerable _lastOrderEntries; - public string Id { get; set; } /// @@ -25,11 +23,7 @@ public class LastOrder /// /// The items associated with the order /// - public IEnumerable LastOrderEntries - { - get { return _lastOrderEntries ?? (_lastOrderEntries = new List()); } - set { _lastOrderEntries = value; } - } + public IEnumerable LastOrderEntries { get; set; } /// /// The total price of all entries of this order including rules diff --git a/backend/WebApi/Lunchorder.Domain/Entities/DocumentDb/MenuVendor.cs b/backend/WebApi/Lunchorder.Domain/Entities/DocumentDb/MenuVendor.cs index e23b8cb..f1cda65 100644 --- a/backend/WebApi/Lunchorder.Domain/Entities/DocumentDb/MenuVendor.cs +++ b/backend/WebApi/Lunchorder.Domain/Entities/DocumentDb/MenuVendor.cs @@ -32,7 +32,7 @@ public class MenuVendor /// /// The ultimate time limit that an order should be submitted to the vendor /// - public TimeSpan SubmitOrderTime { get; set; } + public DateTime SubmitOrderTime { get; set; } /// /// Logo of the vendor diff --git a/backend/WebApi/Lunchorder.Domain/Exceptions/BusinessException.cs b/backend/WebApi/Lunchorder.Domain/Exceptions/BusinessException.cs index c309d00..932a707 100644 --- a/backend/WebApi/Lunchorder.Domain/Exceptions/BusinessException.cs +++ b/backend/WebApi/Lunchorder.Domain/Exceptions/BusinessException.cs @@ -4,5 +4,8 @@ namespace Lunchorder.Domain.Exceptions { public class BusinessException : Exception { + public BusinessException(string message) : base(message) + { + } } } diff --git a/backend/WebApi/Lunchorder.Test/Integration/Repositories/DocumentDbRepositoryTest.cs b/backend/WebApi/Lunchorder.Test/Integration/Repositories/DocumentDbRepositoryTest.cs index 9f81ec1..eeaf870 100644 --- a/backend/WebApi/Lunchorder.Test/Integration/Repositories/DocumentDbRepositoryTest.cs +++ b/backend/WebApi/Lunchorder.Test/Integration/Repositories/DocumentDbRepositoryTest.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Threading.Tasks; using Lunchorder.Common; @@ -655,7 +656,7 @@ public async Task AddBiteMeMenu() Street = string.Empty, StreetNumber = string.Empty }, - SubmitOrderTime = new TimeSpan(9, 30, 0).ToString() + SubmitOrderTime = new DateTime(0, 0, 0, 7, 30, 0).ToString(CultureInfo.InvariantCulture) }; var categoryBroodjesId = "83af0051-c407-4936-a8f6-e1e292b992ed"; @@ -1477,8 +1478,7 @@ public async Task AddBiteMeMenu() Enabled = true, Id = "512e6e00-9d0c-499e-ac0d-0015e4fec42d", Picture = null, - Name = "", - Description = "Pasta kip - kaassaus", + Name = "Pasta kip - kaassaus", Price = 4.50M }, new MenuEntry diff --git a/frontend/app/app.admin-prepay.ts b/frontend/app/app.admin-prepay.ts index 7f9c105..f31f8e7 100644 --- a/frontend/app/app.admin-prepay.ts +++ b/frontend/app/app.admin-prepay.ts @@ -51,7 +51,6 @@ export class AdminPrepayComponent implements OnInit { this.isBusy = true; this.userBalanceError = ""; - debugger; this.balanceService.putBalance(selectedUser.userId, balanceAmount).subscribe( newBalance => { this.toasterService.pop('success', 'Success', `Balance updated to ${newBalance}`); diff --git a/frontend/app/app.badge-row.ts b/frontend/app/app.badge-row.ts index 0c224b8..abd5c1a 100644 --- a/frontend/app/app.badge-row.ts +++ b/frontend/app/app.badge-row.ts @@ -21,6 +21,5 @@ export class BadgeRow implements OnInit { badgeItem : Badge; ngOnInit() { - console.log(`badge: ${this.badgeItem.name}`) } } \ No newline at end of file diff --git a/frontend/app/app.badges-list.ts b/frontend/app/app.badges-list.ts index a735f77..037529b 100644 --- a/frontend/app/app.badges-list.ts +++ b/frontend/app/app.badges-list.ts @@ -23,7 +23,6 @@ export class BadgesList implements OnInit { ngOnInit() { this.badgeService.getBadges().subscribe( badges => { - console.log(`badges received: ${badges}`); this.badges = badges; // todo map badges with current user badges }, diff --git a/frontend/app/app.balance.ts b/frontend/app/app.balance.ts index 507ff1f..8fa77af 100644 --- a/frontend/app/app.balance.ts +++ b/frontend/app/app.balance.ts @@ -8,7 +8,7 @@ import { BalanceService } from './services/balanceService';

About you

-

Check your balance and other options.

+

Check your balance and last 5 orders.

{{accountService.user.userName}}

@@ -17,6 +17,30 @@ import { BalanceService } from './services/balanceService';

{{accountService.user.balance | currency:'EUR':true:'1.2-2'}}

+
+ + + + + + + + + + + + + + + +
DateNameTotal Price
{{lastOrder.orderTime | date: 'medium'}} + +
+ {{ entry.name }} ({{entry.price | currency:'EUR':true:'1.2-2' }}) + {{ entry.appliedRules }} +
+
{{ lastOrder.finalPrice | currency:'EUR':true:'1.2-2' }}
+
`}) diff --git a/frontend/app/app.component.ts b/frontend/app/app.component.ts index 33a3e97..e11bddb 100644 --- a/frontend/app/app.component.ts +++ b/frontend/app/app.component.ts @@ -139,8 +139,6 @@ export class AppComponent implements OnInit { } public login() { - debugger; - this.accountService.login(); } } \ No newline at end of file diff --git a/frontend/app/app.information.ts b/frontend/app/app.information.ts index 62cbea8..4d8baed 100644 --- a/frontend/app/app.information.ts +++ b/frontend/app/app.information.ts @@ -13,7 +13,7 @@ import { Menu } from './domain/dto/menu';
Generic placeholder image

On Time

-

Orders are sent to the venue @ {{menu?.vendor?.submitOrderTime}}. Late orders are your own responsibility and should be made by giving them a call.

+

Orders are sent to the venue @ {{menu?.vendor?.submitOrderTime | date: 'shortTime' }}. Late orders are your own responsibility and should be made by giving them a call.

Generic placeholder image diff --git a/frontend/app/app.menu-category-row.ts b/frontend/app/app.menu-category-row.ts index 76190f5..e6b0a64 100644 --- a/frontend/app/app.menu-category-row.ts +++ b/frontend/app/app.menu-category-row.ts @@ -29,6 +29,5 @@ export class MenuCategoryRow implements OnInit { menuEntries: MenuEntry[]; ngOnInit() { - debugger; } } \ No newline at end of file diff --git a/frontend/app/app.menu-entry-row.ts b/frontend/app/app.menu-entry-row.ts index 17e9380..f9b50b8 100644 --- a/frontend/app/app.menu-entry-row.ts +++ b/frontend/app/app.menu-entry-row.ts @@ -52,13 +52,10 @@ export class MenuEntryRow implements OnInit { isModalOpen: boolean; ngOnInit() { - console.log(`-- menu entryyyy: ${this.menuEntry.name}`); - console.log(`-- menu rules: ${this.menuEntry.rules}`); } openModal() { this.isModalOpen = true; - console.log("rules" + this.menuEntry.rules); } addOrder(event : any, value : any) { diff --git a/frontend/app/app.menu.ts b/frontend/app/app.menu.ts index 82b9856..8dfa04e 100644 --- a/frontend/app/app.menu.ts +++ b/frontend/app/app.menu.ts @@ -99,7 +99,6 @@ export class MenuComponent implements OnInit { } removeOrder(menuOrder: MenuOrder) { - debugger; var matchIndex: number = -1; for (var i = 0; i < this.orderService.menuOrders.length; i++) { if (menuOrder.id === this.orderService.menuOrders[i].id) { @@ -116,20 +115,33 @@ export class MenuComponent implements OnInit { openCheckout() { this.isModalOpen = true; } + closeModal() { this.isModalOpen = false; } finalizeOrder() { + this.isBusy = true; + this.orderService.postMenuOrders().subscribe(menu => { - this.isBusy = true; - this.orderService.menuOrders = new Array(); this.toasterService.pop('success', 'Success', 'Order submitted'); + console.log("current balance: " + this.accountService.user.balance); + console.log("total price: " + this.orderService.totalPrice()) + this.accountService.user.balance -= this.orderService.totalPrice(); + console.log("differnt balance: " + this.accountService.user.balance); + this.orderService.menuOrders = new Array(); this.closeModal(); + + this.accountService.getLast5Orders().subscribe(lastOrders => { + this.accountService.user.last5Orders = lastOrders; + }); }, error => { this.error = error; - this.toasterService.pop('error', 'Failure', 'Something went wrong :('); + this.toasterService.pop('error', 'Failure', error); + this.isBusy = false; + }, () => { + this.isBusy = false; }); } } \ No newline at end of file diff --git a/frontend/app/domain/dto/dtos.d.ts b/frontend/app/domain/dto/dtos.d.ts index c6fe0e6..ab5a02c 100644 --- a/frontend/app/domain/dto/dtos.d.ts +++ b/frontend/app/domain/dto/dtos.d.ts @@ -19,6 +19,7 @@ declare module app.domain.dto { id: string; userOrderHistoryId: string; orderTime: Date; + lastOrderEntries: ILastOrderEntry[]; finalPrice: number; } diff --git a/frontend/app/domain/dto/lastOrder.ts b/frontend/app/domain/dto/lastOrder.ts index 2187ad4..765ec4e 100644 --- a/frontend/app/domain/dto/lastOrder.ts +++ b/frontend/app/domain/dto/lastOrder.ts @@ -1,14 +1,23 @@ +import { LastOrderEntry } from './lastOrderEntry' + export class LastOrder implements app.domain.dto.ILastOrder, Serializable { id: string; userOrderHistoryId: string; orderTime: Date; finalPrice: number; + lastOrderEntries: LastOrderEntry[]; deserialize(input: any) : LastOrder { this.id = input.id; this.userOrderHistoryId = input.userOrderHistoryId; this.orderTime = input.orderTime; this.finalPrice = input.finalPrice; + this.lastOrderEntries = new Array(); + if (input.lastOrderEntries) { + for (var entry of input.lastOrderEntries) { + this.lastOrderEntries.push(new LastOrderEntry().deserialize(entry)); + } + } return this; } } \ No newline at end of file diff --git a/frontend/app/domain/dto/lastOrderEntry.ts b/frontend/app/domain/dto/lastOrderEntry.ts new file mode 100644 index 0000000..007964c --- /dev/null +++ b/frontend/app/domain/dto/lastOrderEntry.ts @@ -0,0 +1,15 @@ +export class LastOrderEntry implements app.domain.dto.ILastOrderEntry, Serializable { + name: string; + appliedRules: string; + freeText: string; + price: number; + + deserialize(input: any) : LastOrderEntry { + if (!input) return; + this.name = input.name; + this.appliedRules = input.appliedRules; + this.freeText = input.freeText; + this.price = input.price; + return this; + } +} \ No newline at end of file diff --git a/frontend/app/domain/dto/platformUserListItem.ts b/frontend/app/domain/dto/platformUserListItem.ts index 4679094..078746c 100644 --- a/frontend/app/domain/dto/platformUserListItem.ts +++ b/frontend/app/domain/dto/platformUserListItem.ts @@ -11,7 +11,6 @@ export class PlatformUserListItem implements app.domain.dto.IPlatformUserListIte } deserialize(input : any) : PlatformUserListItem { - debugger; this.userId = input.userId; this.userName = input.userName; this.firstName = input.firstName; diff --git a/frontend/app/helpers/tokenHelper.ts b/frontend/app/helpers/tokenHelper.ts index 791004d..f8d184d 100644 --- a/frontend/app/helpers/tokenHelper.ts +++ b/frontend/app/helpers/tokenHelper.ts @@ -26,7 +26,6 @@ export class TokenHelper { var params = url.split('#')[1].split('&') for (var i = 0; i < params.length; i++) { - console.log('temp: ' + params[i]); var temp = params[i].split('='); var key = temp[0]; var value = temp[1]; diff --git a/frontend/app/services/accountService.ts b/frontend/app/services/accountService.ts index 23daa02..76e48d7 100644 --- a/frontend/app/services/accountService.ts +++ b/frontend/app/services/accountService.ts @@ -7,12 +7,12 @@ import { GetUserInfoResponse } from '../domain/dto/getUserInfoResponse' import { GetAllUsersResponse } from '../domain/dto/getAllUsersResponse' import { AdalService } from 'angular2-adal/core'; import { TokenHelper } from '../helpers/tokenHelper'; +import { LastOrder } from '../domain/dto/lastOrder' @Injectable() export class AccountService { constructor(private http: HttpClient, private configService: ConfigService, private adalService: AdalService, private tokenHelper: TokenHelper) { this.adalService.init(this.configService.adalConfig); - console.log('ctor accountservice'); this.adalService.handleWindowCallback(); if (this.adalService) { if (this.adalService.userInfo.isAuthenticated) { @@ -60,6 +60,12 @@ private _user:GetUserInfoResponse = new GetUserInfoResponse(); .map(this.extractData) .catch(this.handleError); } + + getLast5Orders(): Observable { + return this.http.get(`${this.accountApiUrl}/last5Orders`) + .map(this.extractLastOrders) + .catch(this.handleError); + } getAllUsers(): Observable { return this.http.get(`${this.accountApiUrl}/users`) @@ -67,14 +73,23 @@ private _user:GetUserInfoResponse = new GetUserInfoResponse(); .catch(this.handleError); } +private extractLastOrders(res: Response) { + let body = res.json(); + + var last5Orders = new Array(); + for (var lastOrder of body) { + last5Orders.push(new LastOrder().deserialize(lastOrder)); + } + + return last5Orders; + } + private extractUsers(res: Response) { - console.log(res); let body = res.json(); return new GetAllUsersResponse().deserialize(body); } private extractData(res: Response) { - console.log(res); let body = res.json(); this.user = new GetUserInfoResponse().deserialize(body); return body || {}; diff --git a/frontend/app/services/badgeService.ts b/frontend/app/services/badgeService.ts index ca7c70e..07d8e3b 100644 --- a/frontend/app/services/badgeService.ts +++ b/frontend/app/services/badgeService.ts @@ -18,7 +18,6 @@ export class BadgeService { } private mapBadges(res: Response): Badge[] { - console.log(res); let body = res.json(); // todo, deserialize in domain object. diff --git a/frontend/app/services/orderService.ts b/frontend/app/services/orderService.ts index 00694b9..0260c97 100644 --- a/frontend/app/services/orderService.ts +++ b/frontend/app/services/orderService.ts @@ -18,7 +18,6 @@ export class OrderService { totalPrice() : number { var price = 0; for (let menu of this.menuOrders) { - debugger; price += menu.price; for (let rule of menu.appliedMenuRules) { @@ -39,6 +38,9 @@ export class OrderService { let errMsg = (error.message) ? error.message : error.status ? `${error.status} - ${error.statusText}` : 'Server error'; console.error(errMsg); // log to console instead - return Observable.throw(errMsg); + if (error._body){ + return Observable.throw(error._body); + } + return Observable.throw("Something went wrong, please contact your administrator"); } } \ No newline at end of file diff --git a/frontend/css/general.scss b/frontend/css/general.scss index 0753f79..41af36b 100644 --- a/frontend/css/general.scss +++ b/frontend/css/general.scss @@ -37,7 +37,13 @@ input[type="checkbox"] { margin: 12px; } - +table.history { + .detail { + clear: both; + display: block; + font-size: 12px; + } +} .menu-entry-row:hover { diff --git a/frontend/package.json b/frontend/package.json index b4b88a1..7e46994 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "lunchorder", - "version": "1.0.0", + "version": "1.0.1", "private": true, "description": "front-end package for lunchorder web application", "main": "index.js",