Exemplo n.º 1
0
        public async Task <List <HSLineItemOrder> > BuyerLineItemDetail(ListArgs <HSOrder> args, BuyerReportViewContext viewContext, string userID, string locationID, DecodedToken decodedToken)
        {
            IList <ListFilter> filters = new List <ListFilter>();

            filters.Add(ApplyBuyerLineContext(viewContext, userID, locationID, decodedToken));

            foreach (var filter in args.Filters)
            {
                filters.Add(ApplyBuyerLineFilter(filter));
            }

            CosmosListOptions listOptions = new CosmosListOptions()
            {
                PageSize      = -1,
                Sort          = "OrderID",
                SortDirection = SortDirection.ASC,
                Filters       = filters,
            };

            IQueryable <LineItemDetailData> queryable = _lineItemDetail.GetQueryable()
                                                        .Where(order =>
                                                               order.PartitionKey == "PartitionValue");

            QueryRequestOptions requestOptions = new QueryRequestOptions
            {
                MaxItemCount   = listOptions.PageSize,
                MaxConcurrency = -1
            };

            CosmosListPage <LineItemDetailData> lineItemDataResponse = await _lineItemDetail.GetItemsAsync(queryable, requestOptions, listOptions);

            List <LineItemDetailData> lineItemData = lineItemDataResponse.Items;

            listOptions.ContinuationToken = lineItemDataResponse.Meta.ContinuationToken;

            while (listOptions.ContinuationToken != null)
            {
                CosmosListPage <LineItemDetailData> responseWithToken = await _lineItemDetail.GetItemsAsync(queryable, requestOptions, listOptions);

                lineItemData.AddRange(responseWithToken.Items);
                listOptions.ContinuationToken = responseWithToken.Meta.ContinuationToken;
            }

            var lineItems = new List <HSLineItemOrder>();

            foreach (LineItemDetailData detailData in lineItemData)
            {
                foreach (HSLineItem lineDetail in detailData.Data.LineItems)
                {
                    lineItems.Add(new HSLineItemOrder
                    {
                        HSOrder    = detailData.Data.Order,
                        HSLineItem = lineDetail
                    });
                }
            }

            return(lineItems);
        }
Exemplo n.º 2
0
        public async Task <CosmosListPage <RMA> > ListBuyerRMAs(CosmosListOptions listOptions, VerifiedUserContext verifiedUser)
        {
            IQueryable <RMA> queryable = _rmaRepo.GetQueryable().Where(rma => rma.FromBuyerID == verifiedUser.Buyer.ID);

            CosmosListPage <RMA> rmas = await GenerateRMAList(queryable, listOptions);

            return(rmas);
        }
Exemplo n.º 3
0
        public async Task <CosmosListPage <RMA> > ListBuyerRMAs(CosmosListOptions listOptions, string buyerID)
        {
            IQueryable <RMA> queryable = _rmaRepo.GetQueryable().Where(rma => rma.FromBuyerID == buyerID);

            CosmosListPage <RMA> rmas = await GenerateRMAList(queryable, listOptions);

            return(rmas);
        }
Exemplo n.º 4
0
        public async Task <List <OrderWithShipments> > ShipmentDetail(string templateID, ListArgs <ReportAdHocFilters> args, DecodedToken decodedToken)
        {
            IList <ListFilter> filters = await BuildFilters(templateID, args, decodedToken, "DateSubmitted", "SupplierID");

            CosmosListOptions listOptions = new CosmosListOptions()
            {
                PageSize      = -1,
                Sort          = "OrderID",
                SortDirection = SortDirection.ASC,
                Filters       = filters,
            };

            IQueryable <OrderWithShipments> queryable = _ordersAndShipments.GetQueryable()
                                                        .Where(order =>
                                                               order.PartitionKey == "PartitionValue");

            QueryRequestOptions requestOptions = new QueryRequestOptions
            {
                MaxItemCount   = listOptions.PageSize,
                MaxConcurrency = -1
            };

            CosmosListPage <OrderWithShipments> ordersWithShipmentsDataResponse = await _ordersAndShipments.GetItemsAsync(queryable, requestOptions, listOptions);

            List <OrderWithShipments> orderWithShipmentsData = ordersWithShipmentsDataResponse.Items;

            listOptions.ContinuationToken = ordersWithShipmentsDataResponse.Meta.ContinuationToken;

            while (listOptions.ContinuationToken != null)
            {
                CosmosListPage <OrderWithShipments> responseWithToken = await _ordersAndShipments.GetItemsAsync(queryable, requestOptions, listOptions);

                orderWithShipmentsData.AddRange(responseWithToken.Items);
                listOptions.ContinuationToken = responseWithToken.Meta.ContinuationToken;
            }

            var ordersWithShipments = new List <OrderWithShipments>();

            var supplierFilter = args.Filters.FirstOrDefault(filter => filter.PropertyName == "SupplierID");

            var me = await _oc.Me.GetAsync(decodedToken.AccessToken);

            foreach (OrderWithShipments detailData in orderWithShipmentsData)
            {
                if (supplierFilter == null || supplierFilter.FilterExpression == detailData.SupplierID)
                {
                    if (decodedToken.CommerceRole == CommerceRole.Seller || me.Supplier.ID == detailData.SupplierID)
                    {
                        ordersWithShipments.Add(detailData);
                    }
                }
            }

            return(ordersWithShipments);
        }
Exemplo n.º 5
0
        private async Task <RMA> GetRMA(string rmaNumber, DecodedToken decodedToken)
        {
            var currentRMAFilter = new ListFilter("RMANumber", rmaNumber);
            CosmosListOptions currentRMAListOptions = new CosmosListOptions()
            {
                PageSize = 1, ContinuationToken = null, Filters = { currentRMAFilter }
            };
            CosmosListPage <RMA> currentRMAListPage = await ListRMAs(currentRMAListOptions, decodedToken);

            RMA currentRMA = currentRMAListPage.Items[0];

            return(currentRMA);
        }
Exemplo n.º 6
0
        public async Task <CosmosListPage <RMA> > ListRMAs(CosmosListOptions listOptions, DecodedToken decodedToken)
        {
            IQueryable <RMA> queryable = _rmaRepo.GetQueryable().Where(rma => rma.PartitionKey == "PartitionValue");

            if (decodedToken.CommerceRole == CommerceRole.Supplier)
            {
                var me = await _oc.Me.GetAsync(accessToken : decodedToken.AccessToken);

                queryable = queryable.Where(rma => rma.SupplierID == me.Supplier.ID);
            }

            CosmosListPage <RMA> rmas = await GenerateRMAList(queryable, listOptions);

            return(rmas);
        }
Exemplo n.º 7
0
        public async Task <List <OrderDetailData> > PurchaseOrderDetail(string templateID, ListArgs <ReportAdHocFilters> args, DecodedToken decodedToken)
        {
            IList <ListFilter> filters = await BuildFilters(templateID, args, decodedToken, "DateSubmitted", "xp.SupplierIDs", "ShippingAddressID");

            CosmosListOptions listOptions = new CosmosListOptions()
            {
                PageSize      = -1,
                Sort          = "OrderID",
                SortDirection = SortDirection.ASC,
                Filters       = filters,
            };

            IQueryable <OrderDetailData> queryable = _purchaseOrderDetail.GetQueryable()
                                                     .Where(order =>
                                                            order.PartitionKey == "PartitionValue");

            QueryRequestOptions requestOptions = new QueryRequestOptions
            {
                MaxItemCount   = listOptions.PageSize,
                MaxConcurrency = -1
            };

            CosmosListPage <OrderDetailData> purchaseOrderDataResponse = await _purchaseOrderDetail.GetItemsAsync(queryable, requestOptions, listOptions);

            List <OrderDetailData> purchaseOrderData = purchaseOrderDataResponse.Items;

            listOptions.ContinuationToken = purchaseOrderDataResponse.Meta.ContinuationToken;

            while (listOptions.ContinuationToken != null)
            {
                CosmosListPage <OrderDetailData> responseWithToken = await _purchaseOrderDetail.GetItemsAsync(queryable, requestOptions, listOptions);

                purchaseOrderData.AddRange(responseWithToken.Items);
                listOptions.ContinuationToken = responseWithToken.Meta.ContinuationToken;
            }

            var purchaseOrders = new List <OrderDetailData>();

            foreach (OrderDetailData purchaseOrder in purchaseOrderData)
            {
                purchaseOrder.ShipFromAddressID = purchaseOrder.Data.xp.SelectedShipMethodsSupplierView != null ? purchaseOrder.Data.xp.SelectedShipMethodsSupplierView[0].ShipFromAddressID : null;
                purchaseOrder.ShipMethod        = purchaseOrder.Data.xp.SelectedShipMethodsSupplierView != null ? purchaseOrder.Data.xp.SelectedShipMethodsSupplierView[0].Name : null;
                purchaseOrders.Add(purchaseOrder);
            }

            return(purchaseOrders);
        }
Exemplo n.º 8
0
        public async Task <List <OrderDetailData> > SalesOrderDetail(string templateID, ListArgs <ReportAdHocFilters> args, DecodedToken decodedToken)
        {
            IList <ListFilter> filters = await BuildFilters(templateID, args, decodedToken, "DateSubmitted", "xp.SupplierIDs", "FromCompanyID");

            CosmosListOptions listOptions = new CosmosListOptions()
            {
                PageSize      = -1,
                Sort          = "OrderID",
                SortDirection = SortDirection.ASC,
                Filters       = filters,
            };

            IQueryable <OrderDetailData> queryable = _salesOrderDetail.GetQueryable()
                                                     .Where(order =>
                                                            order.PartitionKey == "PartitionValue");

            QueryRequestOptions requestOptions = new QueryRequestOptions
            {
                MaxItemCount   = listOptions.PageSize,
                MaxConcurrency = -1
            };

            CosmosListPage <OrderDetailData> salesOrderDataResponse = await _salesOrderDetail.GetItemsAsync(queryable, requestOptions, listOptions);

            List <OrderDetailData> salesOrderData = salesOrderDataResponse.Items;

            listOptions.ContinuationToken = salesOrderDataResponse.Meta.ContinuationToken;

            while (listOptions.ContinuationToken != null)
            {
                CosmosListPage <OrderDetailData> responseWithToken = await _salesOrderDetail.GetItemsAsync(queryable, requestOptions, listOptions);

                salesOrderData.AddRange(responseWithToken.Items);
                listOptions.ContinuationToken = responseWithToken.Meta.ContinuationToken;
            }

            var salesOrders = new List <OrderDetailData>();

            foreach (OrderDetailData salesOrder in salesOrderData)
            {
                salesOrders.Add(salesOrder);
            }

            return(salesOrders);
        }
Exemplo n.º 9
0
        public async Task <CosmosListPage <RMA> > ListRMAsForOrder(string orderID, DecodedToken decodedToken)
        {
            var me = await _oc.Me.GetAsync(accessToken : decodedToken.AccessToken);

            HSOrder order = await _oc.Orders.GetAsync <HSOrder>(OrderDirection.Incoming, orderID);

            await EnsureUserCanAccessOrder(order, decodedToken);

            var listFilter = new ListFilter("SourceOrderID", orderID);
            CosmosListOptions listOptions = new CosmosListOptions()
            {
                PageSize = 100, ContinuationToken = null, Filters = { listFilter }
            };

            CosmosListPage <RMA> rmasOnOrder = await _rmaCommand.ListBuyerRMAs(listOptions, me.Buyer.ID);

            return(rmasOnOrder);
        }
Exemplo n.º 10
0
        private async Task <CosmosListPage <LineItemDetailData> > GetLineItemDataAsync(string productID)
        {
            var queryable = _lineItemDetailDataRepo
                            .GetQueryable()
                            .Where(order => order.Data.LineItems.Any(lineItem => lineItem.ProductID == productID) && order.Data.Order.DateCreated > DateTime.Now.AddMonths(-12));

            var requestOptions = new QueryRequestOptions()
            {
                MaxItemCount = 1
            };

            CosmosListOptions listOptions = new CosmosListOptions()
            {
                PageSize = 100, ContinuationToken = null
            };

            CosmosListPage <LineItemDetailData> currentLineItemListPage = await _lineItemDetailDataRepo.GetItemsAsync(queryable, requestOptions, listOptions);

            return(currentLineItemListPage);
        }
Exemplo n.º 11
0
        private async Task <string> BuildRMANumber(HSOrder order)
        {
            var args = new CosmosListOptions()
            {
                PageSize = 100,
                Filters  = new List <ListFilter>()
                {
                    new ListFilter("SourceOrderID", order.ID)
                }
            };

            CosmosListPage <RMA> existingRMAsOnOrder = await ListBuyerRMAs(args, order.FromCompanyID);

            int lastRMANumber = existingRMAsOnOrder.Items
                                .OrderBy(rma => rma.RMANumber)
                                .Select(rma => int.Parse(rma.RMANumber.Substring(rma.RMANumber.LastIndexOf("-") + 1)))
                                .LastOrDefault();
            string rmaSuffix = $"{lastRMANumber + 1}".PadLeft(2, '0');
            string rmaNumber = $"{order.ID}-RMA-{rmaSuffix}";

            return(rmaNumber);
        }
Exemplo n.º 12
0
        public virtual async Task <CosmosListPage <RMA> > ListRMAsByOrderID(string orderID, CommerceRole commerceRole, MeUser me, bool accessAllRMAsOnOrder = false)
        {
            string sourceOrderID = orderID.Split("-")[0];

            CosmosListOptions listOptions = new CosmosListOptions()
            {
                PageSize = 100
            };

            IQueryable <RMA> queryable = _rmaRepo.GetQueryable()
                                         .Where(rma =>
                                                rma.PartitionKey == "PartitionValue" &&
                                                rma.SourceOrderID == sourceOrderID);

            if (commerceRole == CommerceRole.Supplier && !accessAllRMAsOnOrder)
            {
                queryable = QueryOnlySupplierRMAs(queryable, me.Supplier.ID);
            }

            CosmosListPage <RMA> rmas = await GenerateRMAList(queryable, listOptions);

            return(rmas);
        }
Exemplo n.º 13
0
        public async Task <RMA> Get(ListArgs <RMA> args, DecodedToken decodedToken)
        {
            CosmosListOptions listOptions = new CosmosListOptions()
            {
                PageSize = 100,
                Search   = args.Search,
                SearchOn = "RMANumber"
            };

            IQueryable <RMA> queryable = _rmaRepo.GetQueryable()
                                         .Where(rma =>
                                                rma.PartitionKey == "PartitionValue");

            if (decodedToken.CommerceRole == CommerceRole.Supplier)
            {
                var me = await _oc.Me.GetAsync(accessToken : decodedToken.AccessToken);

                queryable = queryable.Where(rma => rma.SupplierID == me.Supplier.ID);
            }

            CosmosListPage <RMA> rmas = await GenerateRMAList(queryable, listOptions);

            return(rmas.Items[0]);
        }
Exemplo n.º 14
0
 public async Task <CosmosListPage <RMA> > ListRMAs([FromBody] CosmosListOptions listOptions)
 {
     return(await _rmaCommand.ListRMAs(listOptions, UserContext));
 }
Exemplo n.º 15
0
        public async Task <CosmosListPage <RMA> > ListBuyerRMAs([FromBody] CosmosListOptions listOptions)
        {
            var me = await _oc.Me.GetAsync(accessToken : UserContext.AccessToken);

            return(await _rmaCommand.ListBuyerRMAs(listOptions, me?.Buyer?.ID));
        }
Exemplo n.º 16
0
 public async Task <CosmosListPage <RMA> > ListBuyerRMAs([FromBody] CosmosListOptions listOptions)
 {
     RequireOneOf(CustomRole.MPLocationViewAllOrders);
     return(await _rmaCommand.ListBuyerRMAs(listOptions, VerifiedUserContext));
 }
Exemplo n.º 17
0
        public async Task <List <HSLineItemOrder> > LineItemDetail(string templateID, ListArgs <ReportAdHocFilters> args, DecodedToken decodedToken)
        {
            IList <ListFilter> filters = await BuildFilters(templateID, args, decodedToken, "DateSubmitted", "xp.SupplierIDs", "FromCompanyID");

            CosmosListOptions listOptions = new CosmosListOptions()
            {
                PageSize      = -1,
                Sort          = "OrderID",
                SortDirection = SortDirection.ASC,
                Filters       = filters,
            };

            IQueryable <LineItemDetailData> queryable = _lineItemDetail.GetQueryable()
                                                        .Where(order =>
                                                               order.PartitionKey == "PartitionValue");

            QueryRequestOptions requestOptions = new QueryRequestOptions
            {
                MaxItemCount   = listOptions.PageSize,
                MaxConcurrency = -1
            };

            CosmosListPage <LineItemDetailData> lineItemDataResponse = await _lineItemDetail.GetItemsAsync(queryable, requestOptions, listOptions);

            List <LineItemDetailData> lineItemData = lineItemDataResponse.Items;

            listOptions.ContinuationToken = lineItemDataResponse.Meta.ContinuationToken;

            while (listOptions.ContinuationToken != null)
            {
                CosmosListPage <LineItemDetailData> responseWithToken = await _lineItemDetail.GetItemsAsync(queryable, requestOptions, listOptions);

                lineItemData.AddRange(responseWithToken.Items);
                listOptions.ContinuationToken = responseWithToken.Meta.ContinuationToken;
            }

            var lineItems = new List <HSLineItemOrder>();

            var supplierFilter = args.Filters.FirstOrDefault(filter => filter.PropertyName == "SupplierID");

            var me = await _oc.Me.GetAsync(decodedToken.AccessToken);

            foreach (LineItemDetailData detailData in lineItemData)
            {
                foreach (HSLineItem lineDetail in detailData.Data.LineItems)
                {
                    if (supplierFilter == null || supplierFilter.FilterExpression == lineDetail.SupplierID)
                    {
                        if (decodedToken.CommerceRole == CommerceRole.Supplier)
                        {
                            //filter down to only current supplierID
                            var lineWithPOOrderFields = detailData.Data.LineItemsWithPurchaseOrderFields != null?detailData.Data.LineItemsWithPurchaseOrderFields.FirstOrDefault(line => line.SupplierID == me.Supplier.ID && line.ID == lineDetail.ID) : null;

                            if (lineWithPOOrderFields != null)
                            {
                                lineDetail.ID = lineWithPOOrderFields.ID;
                                detailData.Data.Order.Subtotal = lineWithPOOrderFields.Subtotal;
                                detailData.Data.Order.ID       = lineWithPOOrderFields.OrderID;
                                detailData.Data.Order.Total    = lineWithPOOrderFields.Total;
                                lineDetail.UnitPrice           = lineWithPOOrderFields.UnitPrice;
                            }
                        }

                        if (decodedToken.CommerceRole == CommerceRole.Seller || me.Supplier.ID == lineDetail.SupplierID)
                        {
                            var lineWithMiscFields = detailData.Data.LineItemsWithMiscFields != null?detailData.Data.LineItemsWithMiscFields.FirstOrDefault(line => line.ID == lineDetail.ID) : null;

                            lineItems.Add(new HSLineItemOrder
                            {
                                HSOrder    = detailData.Data.Order,
                                HSLineItem = lineDetail
                            });
                        }
                    }
                }
            }

            return(lineItems);
        }
Exemplo n.º 18
0
        public async Task <List <RMAWithRMALineItem> > RMADetail(string templateID, ListArgs <ReportAdHocFilters> args, DecodedToken decodedToken)
        {
            IList <ListFilter> filters = await BuildFilters(templateID, args, decodedToken, "DateCreated", "SupplierID");

            CosmosListOptions listOptions = new CosmosListOptions()
            {
                PageSize      = -1,
                Sort          = "RMANumber",
                SortDirection = SortDirection.ASC,
                Filters       = filters,
            };

            IQueryable <RMA> queryable = _rmaDetail.GetQueryable()
                                         .Where(order =>
                                                order.PartitionKey == "PartitionValue");

            QueryRequestOptions requestOptions = new QueryRequestOptions
            {
                MaxItemCount   = listOptions.PageSize,
                MaxConcurrency = -1
            };

            CosmosListPage <RMA> rmaDataResponse = await _rmaDetail.GetItemsAsync(queryable, requestOptions, listOptions);

            List <RMA> rmaData = rmaDataResponse.Items;

            listOptions.ContinuationToken = rmaDataResponse.Meta.ContinuationToken;

            while (listOptions.ContinuationToken != null)
            {
                CosmosListPage <RMA> responseWithToken = await _rmaDetail.GetItemsAsync(queryable, requestOptions, listOptions);

                rmaData.AddRange(responseWithToken.Items);
                listOptions.ContinuationToken = responseWithToken.Meta.ContinuationToken;
            }

            var rmas = new List <RMAWithRMALineItem>();

            var supplierFilter = args.Filters.FirstOrDefault(filter => filter.PropertyName == "SupplierID");

            var me = await _oc.Me.GetAsync(decodedToken.AccessToken);

            foreach (RMA detailData in rmaData)
            {
                if (supplierFilter == null || supplierFilter.FilterExpression == detailData.SupplierID)
                {
                    if (decodedToken.CommerceRole == CommerceRole.Seller || me.Supplier.ID == detailData.SupplierID)
                    {
                        foreach (RMALineItem rmaLineItem in detailData.LineItems)
                        {
                            rmas.Add(new RMAWithRMALineItem
                            {
                                RMA         = detailData,
                                RMALineItem = rmaLineItem
                            });
                        }
                    }
                }
            }

            return(rmas);
        }
Exemplo n.º 19
0
        private async Task <CosmosListPage <RMA> > GenerateRMAList(IQueryable <RMA> queryable, CosmosListOptions listOptions)
        {
            QueryRequestOptions requestOptions = new QueryRequestOptions();

            requestOptions.MaxItemCount = listOptions.PageSize;

            CosmosListPage <RMA> rmas = await _rmaRepo.GetItemsAsync(queryable, requestOptions, listOptions);

            return(rmas);
        }