private async void OnCompeletePayment(object obj) { if (IsBusy) { return; } if (ReceivedMoneyBindProp < BillBindProp.TotalPrice) { return; } IsBusy = true; try { // Thuc hien cong viec tai day if (!IsCompletedBindProp) { IsCompletedBindProp = true; } else { var invoiceLogic = new InvoiceLogic(_dbContext); var invoiceItemLogic = new InvoiceItemLogic(_dbContext); var tableLogic = new TableLogic(_dbContext); var subItemLogic = new ItemDiscountLogic(_dbContext); var itemLogic = new ItemLogic(_dbContext); var invoice = new Invoice { Id = BillBindProp.Id, Status = (int)InvoiceStatus.Paid, PaidAmount = ReceivedMoneyBindProp, Tip = TipBindProp, TotalPrice = BillBindProp.TotalPrice, IsTakeAway = BillBindProp.IsTakeAway, FkTable = BillBindProp.FkTable, CloseDate = DateTime.Now.ToString(), CustomerCount = BillBindProp.CustomerCount, InvoiceNumber = await GenerateInvoiceNumber() }; if (IsEditing) { await invoiceLogic.UpdateAsync(invoice, false); } else { await invoiceLogic.CreateAsync(invoice, false); } if (BillBindProp.IsTakeAway == 0) { await tableLogic.ChangeStatusAsync(new Table { Id = BillBindProp.FkTable, IsSelected = 0 }, false); } foreach (var item in BillBindProp.ListItemInBill) { if (item.Status == Status.New) { await invoiceItemLogic.CreateAsync(new InvoiceItemOrDiscount { FkInvoice = invoice.Id, FkItemOrDiscount = item.Id, Quantity = item.Quantity, IsDiscount = 0, Value = item.Value }, false); for (int i = 1; i < item.ListSubItem.Count; i++) { await subItemLogic.CreateAsync(new ItemDiscount { FkItem = item.Id, FkDiscount = item.ListSubItem[i].Id, Value = item.ListSubItem[i].Value }, false); } } await itemLogic.ModifyQuantityAsync(item.Id, -item.Quantity, false); } foreach (var item in BillBindProp.ListDiscount) { if (item.Status == Status.New) { await invoiceItemLogic.CreateAsync(new InvoiceItemOrDiscount { FkInvoice = invoice.Id, FkItemOrDiscount = item.Id, Quantity = item.Quantity, IsDiscount = 1, Value = item.Value }, false); } } await _dbContext.SaveChangesAsync(); var param = new NavigationParameters(); param.Add(Keys.BILL, BillBindProp.Id); await NavigationService.GoBackAsync(param); } } catch (Exception e) { await ShowError(e); } finally { IsBusy = false; } }