示例#1
0
        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;
            }
        }