private void OnCloseScreen(string obj)
 {
     if (AppServices.MainDataContext.SelectedDepartment != null && AppServices.MainDataContext.IsCurrentWorkPeriodOpen)
     {
         EventServiceFactory.EventService.PublishEvent(EventTopicNames.DisplayTicketView);
     }
     else
     {
         EventServiceFactory.EventService.PublishEvent(EventTopicNames.ActivateNavigation);
     }
     SelectedView = 0;
     ActiveView   = 0;
     SelectedCustomerTransactions.Clear();
 }
        public void RefreshSelectedCustomer()
        {
            ClearSearchValues();

            if (AppServices.MainDataContext.SelectedTicket != null && AppServices.MainDataContext.SelectedTicket.CustomerId > 0)
            {
                var customer = Dao.SingleWithCache <Customer>(x => x.Id == AppServices.MainDataContext.SelectedTicket.CustomerId);
                if (customer != null)
                {
                    FoundCustomers.Add(new CustomerViewModel(customer));
                }
                if (SelectedCustomer != null)
                {
                    SelectedView = 1;
                    SelectedCustomer.UpdateDetailedInfo();
                }
            }
            RaisePropertyChanged("SelectedCustomer");
            RaisePropertyChanged("IsClearVisible");
            RaisePropertyChanged("IsResetCustomerVisible");
            RaisePropertyChanged("IsMakePaymentVisible");
            ActiveView = 0;
            SelectedCustomerTransactions.Clear();
        }
        private void OnDisplayCustomerAccount(string obj)
        {
            SaveSelectedCustomer();
            SelectedCustomerTransactions.Clear();
            if (SelectedCustomer != null)
            {
                var tickets             = Dao.Query <Ticket>(x => x.CustomerId == SelectedCustomer.Id && x.LastPaymentDate > SelectedCustomer.AccountOpeningDate, x => x.Payments);
                var cashTransactions    = Dao.Query <CashTransaction>(x => x.Date > SelectedCustomer.AccountOpeningDate && x.CustomerId == SelectedCustomer.Id);
                var accountTransactions = Dao.Query <AccountTransaction>(x => x.Date > SelectedCustomer.AccountOpeningDate && x.CustomerId == SelectedCustomer.Id);

                var transactions = new List <CustomerTransactionViewModel>();
                transactions.AddRange(tickets.Select(x => new CustomerTransactionViewModel
                {
                    Description = string.Format(Resources.TicketNumber_f, x.TicketNumber),
                    Date        = x.LastPaymentDate,
                    Receivable  = x.GetAccountPaymentAmount() + x.GetAccountRemainingAmount(),
                    Liability   = x.GetAccountPaymentAmount()
                }));

                transactions.AddRange(cashTransactions.Where(x => x.TransactionType == (int)TransactionType.Income)
                                      .Select(x => new CustomerTransactionViewModel
                {
                    Description = x.Name,
                    Date        = x.Date,
                    Liability   = x.Amount
                }));

                transactions.AddRange(cashTransactions.Where(x => x.TransactionType == (int)TransactionType.Expense)
                                      .Select(x => new CustomerTransactionViewModel
                {
                    Description = x.Name,
                    Date        = x.Date,
                    Receivable  = x.Amount
                }));

                transactions.AddRange(accountTransactions.Where(x => x.TransactionType == (int)TransactionType.Liability)
                                      .Select(x => new CustomerTransactionViewModel
                {
                    Description = x.Name,
                    Date        = x.Date,
                    Liability   = x.Amount
                }));

                transactions.AddRange(accountTransactions.Where(x => x.TransactionType == (int)TransactionType.Receivable)
                                      .Select(x => new CustomerTransactionViewModel
                {
                    Description = x.Name,
                    Date        = x.Date,
                    Receivable  = x.Amount
                }));

                transactions = transactions.OrderBy(x => x.Date).ToList();

                for (var i = 0; i < transactions.Count; i++)
                {
                    transactions[i].Balance = (transactions[i].Receivable - transactions[i].Liability);
                    if (i > 0)
                    {
                        (transactions[i].Balance) += (transactions[i - 1].Balance);
                    }
                }

                SelectedCustomerTransactions.AddRange(transactions);
                RaisePropertyChanged("TotalReceivable");
                RaisePropertyChanged("TotalLiability");
                RaisePropertyChanged("TotalBalance");
            }
            ActiveView = 1;
        }