예제 #1
0
        private void Init()
        {
            Filter  = new InvoicesFilterModel();
            QtyList = new ObservableCollection <int> {
                50, 100, 150, 200
            };
            InvoiceStatusList = new ObservableCollection <KeyValuePair <InvoicesQueryContextStatus, string> >
            {
                new KeyValuePair <InvoicesQueryContextStatus, string>(InvoicesQueryContextStatus.None, nameof(AppResources.All).Translate()),
                new KeyValuePair <InvoicesQueryContextStatus, string>(InvoicesQueryContextStatus.NotPaid, nameof(AppResources.NotPaid).Translate()),
                new KeyValuePair <InvoicesQueryContextStatus, string>(InvoicesQueryContextStatus.Paid, nameof(AppResources.Paid).Translate()),
            };


            Filter.SelectedQty         = _qtyList.First();
            Filter.StartDate           = (Mode == InvoicePageDefaultMode.All) ? DateTime.Today.AddDays(-365) : default(DateTime?);
            Filter.EndDate             = (Mode == InvoicePageDefaultMode.All) ? DateTime.Today : default(DateTime?);
            Children[0].BindingContext = this;
            SortColumns = new ObservableCollection <SortColumnItem>
            {
                new SortColumnItem(InvoiceSortableColumns.AccountNumber, nameof(AppResources.AccountNumber).Translate()),
                new SortColumnItem(InvoiceSortableColumns.Account, nameof(AppResources.Account).Translate()),
                new SortColumnItem(InvoiceSortableColumns.PurchaseOrder, nameof(AppResources.PurchaseOrder).Translate()),
                new SortColumnItem(InvoiceSortableColumns.JobName, nameof(AppResources.JobName).Translate()),
                new SortColumnItem(InvoiceSortableColumns.OrderNumber, nameof(AppResources.OrderNumber).Translate()),
                new SortColumnItem(InvoiceSortableColumns.Plant, nameof(AppResources.TrulitePlant).Translate()),
                new SortColumnItem(InvoiceSortableColumns.Invoice, nameof(AppResources.Invoice).Translate()),
                new SortColumnItem(InvoiceSortableColumns.InvoiceDate, nameof(AppResources.InvoiceDate).Translate()),
                new SortColumnItem(InvoiceSortableColumns.DueDate, nameof(AppResources.DueDate).Translate()),
                new SortColumnItem(InvoiceSortableColumns.Amount, nameof(AppResources.OpenAmount).Translate()),
                new SortColumnItem(InvoiceSortableColumns.TotalInvoiceAmount, nameof(AppResources.TotalInvoiceAmount).Translate()),
                new SortColumnItem(InvoiceSortableColumns.Status, nameof(AppResources.Status).Translate()),
                new SortColumnItem(InvoiceSortableColumns.SalesPerson, nameof(AppResources.SalesPerson).Translate()),
                new SortColumnItem(InvoiceSortableColumns.Terms, nameof(AppResources.Terms).Translate()),
                new SortColumnItem(InvoiceSortableColumns.Weight, nameof(AppResources.Weight).Translate()),
                new SortColumnItem(InvoiceSortableColumns.Sqft, nameof(AppResources.SquareFoot).Translate()),
            };
            SelectedSortColumn = _sortColumns[7];
            Ascending          = true;
            switch (Mode)
            {
            case InvoicePageDefaultMode.All:
                Filter.Status = _invoiceStatusList[0];
                break;

            case InvoicePageDefaultMode.Open:
                Filter.Status = _invoiceStatusList[1];
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
예제 #2
0
        private bool IsFilterDifferentFromLast(InvoicesFilterModel currentFilter)
        {
            if (_previousFilter == null)
            {
                return(true);
            }
            if (_previousFilter.Number != currentFilter.Number)
            {
                return(true);
            }
            if (_previousFilter.SalesOrderNumber != currentFilter.SalesOrderNumber)
            {
                return(true);
            }
            if (_previousFilter.EndDueDate != currentFilter.EndDueDate)
            {
                return(true);
            }
            if (_previousFilter.StartDueDate != currentFilter.StartDueDate)
            {
                return(true);
            }
            if (_previousFilter.EndDate != currentFilter.EndDate)
            {
                return(true);
            }
            if (_previousFilter.StartDate != currentFilter.StartDate)
            {
                return(true);
            }
            if (_previousFilter.PONumber != currentFilter.PONumber)
            {
                return(true);
            }
            if (_previousFilter.SelectedQty != currentFilter.SelectedQty)
            {
                return(true);
            }

            return(false);
        }
        public async Task Load()
        {
            try
            {
                IsBusy = true;
                if (_loadFromServer)
                {
                    InvoicesFilterModel filter = new InvoicesFilterModel
                    {
                        Number = _invoice.Key,
                        Status = new KeyValuePair <InvoicesQueryContextStatus, string>(InvoicesQueryContextStatus.None, null)
                    };

                    var result = await Api.GetInvoiceList(filter);

                    if (!result.Successful.GetValueOrDefault())
                    {
                        await Alert.DisplayApiCallError(result.ExceptionMessage, result.ValidationErrors);

                        return;
                    }


                    if ((!result.Data?.Any()) ?? true)
                    {
                        await Alert.ShowMessage("Server did not return an invoice");

                        return;
                    }

                    var invoice = result.Data.First().CloneToType <InvoiceModel, Invoice>();
                    Invoice = invoice;
                }
                var listResponse = await Api.GetInvoiceLines(_invoice);

                Invoice.Lines = listResponse.Data;



                long.TryParse(_invoice.RecId, out var invoiceLongId);
                InvoiceSettlementsQueryContext settlementContext = new InvoiceSettlementsQueryContext
                {
                    CustomerInfo = Api.GetCustomerContext(),
                    InvoiceRecId = invoiceLongId
                };
                var settlementResult = await Api.GetInvoiceSettlements(settlementContext);

                if (!settlementResult.Successful.GetValueOrDefault())
                {
                    await Alert.DisplayApiCallError(settlementResult.ExceptionMessage, settlementResult.ValidationErrors);

                    return;
                }

                Settlements = new ObservableCollection <InvoiceSettlement>(settlementResult.Data);
                NoResults   = !_settlements.Any();
            }
            catch (Exception e)
            {
                await Alert.DisplayError(e);
            }
            finally
            {
                IsBusy = false;
            }
        }
예제 #4
0
 private async Task OnSearch(InvoicesFilterModel arg)
 {
     ShowFilter = false;
     await Load(arg);
 }
예제 #5
0
        public async Task Load(InvoicesFilterModel filter = null, SortColumnItem sortColumnItem = null)
        {
            try
            {
                IsBusy = true;
                filter = filter ?? GetDefaultFilter();

                if (sortColumnItem == null)
                {
                    sortColumnItem = new SortColumnItem(InvoiceSortableColumns.InvoiceDate, null)
                    {
                        Ascending = true
                    };
                }
                IEnumerable <InvoiceModel> lines;
                if (IsFilterDifferentFromLast(filter))
                {
                    var result = await Api.GetInvoiceList(filter);

                    if (!result.Successful.GetValueOrDefault())
                    {
                        await Alert.ShowMessage(result.ExceptionMessage);

                        return;
                    }
                    lines = new List <InvoiceModel>(result.Data.Select(p => p.CloneToType <InvoiceModel, Invoice>()));
                }
                else
                {
                    lines = _list;
                }
                var sortedLines = SortList(sortColumnItem, lines.ToList())
                                  .Take(filter.SelectedQty);

                _previousFilter = filter;
                if (_list != null)
                {
                    foreach (var invoiceModel in _list)
                    {
                        invoiceModel.PropertyChanged -= InvoiceModel_PropertyChanged;
                    }
                }


                List = new ObservableCollection <InvoiceModel>(sortedLines);

                if (_list != null)
                {
                    foreach (var invoiceModel in _list)
                    {
                        invoiceModel.PropertyChanged += InvoiceModel_PropertyChanged;
                    }
                }

                NoResults = !(_list?.Any() ?? false);
                //TotalAmount = (decimal)sortedLines.Sum(p => p.Amount.GetValueOrDefault());
            }
            catch (Exception e)
            {
                await Alert.DisplayError(e);
            }
            finally
            {
                IsBusy = false;
            }
        }
예제 #6
0
        public async Task <ApiResponseOfListOfInvoice> GetInvoiceList(InvoicesFilterModel filter)
        {
            var result = await AXClient.Instance.GetInvoicesAsync(filter.ToInvoicesQueryContext());

            return(result);
        }