public void Remove(Model.PaymentMethod entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }

            Remove(entity.PaymentMethodId);
        }
        public void Update(Model.PaymentMethod entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }
            string update = string.Format(@"update  PaymentMethod set MethodCode= @MethodCode,Name= @Name,Note= @Note where PaymentMethodId = @PaymentMethodId");

            Connection.Execute(update, entity, transaction: Transaction);
        }
        public void Add(Model.PaymentMethod entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }
            string insert = string.Format(@"insert into PaymentMethod(MethodCode,Name,Note) values (@MethodCode,@Name,@Note)");

            Connection.Execute(insert, entity, Transaction);
        }
Example #4
0
        public async Task <IActionResult> Create([FromBody] View.Order request)
        {
            var client = await GetClient();

            if (request == null)
            {
                throw new BadRequestException("Request", "Request cannot be null.");
            }

            if (request.User == null)
            {
                throw new BadRequestException("Request User", "Request user cannot be null.");
            }

            var order = new Model.Order();

            order.OrderItems = new List <Model.OrderItem>();

            var organizationItems = await db.OrganizationItems.Where(x => x.Organization == client.Organization).Select(x => x.Item).ToListAsync();

            var device = await db.Devices
                         .Include(x => x.Inventory)
                         .ThenInclude(x => x.InventoryItems)
                         .ThenInclude(x => x.Item)
                         .FirstOrDefaultAsync(x => x.DeviceGuid == client.User.UserGuid);

            var inventoryItems = device.Inventory.InventoryItems.ToList();
            var orderItems     = request.OrderItems.ToList();

            foreach (var orderItem in orderItems)
            {
                var inventoryItem = inventoryItems.FirstOrDefault(x => x.Item.ItemGuid == orderItem.Item.ItemGuid);

                if (inventoryItem == null)
                {
                    throw new BadRequestException("OrderItem", "One or more order items are not part of the device inventory.");
                }

                if (inventoryItem.Quantity < int.Parse(orderItem.Quantity))
                {
                    throw new BadRequestException("Quantity", "Inventory does not contain required amount of items to complete order.");
                }

                order.OrderItems.Add(new Model.OrderItem {
                    Item     = inventoryItem.Item,
                    Quantity = int.Parse(orderItem.Quantity)
                });

                inventoryItem.Quantity -= int.Parse(orderItem.Quantity);
                db.InventoryItems.Update(inventoryItem);
            }

            db.Orders.Add(order);

            Model.PaymentMethod paymentMethod;

            string transactionToken = "";

            if (request.User.Pin != null)
            {
                var user = await db.Users
                           .Include(x => x.PaymentMethods)
                           .FirstOrDefaultAsync(x => x.Pin == request.User.Pin);

                if (user == null)
                {
                    throw new NotFoundException("User");
                }

                paymentMethod = user.PaymentMethods.FirstOrDefault(x => x.Default == true);

                if (paymentMethod == null)
                {
                    throw new NotFoundException("Default PaymentMethod");
                }

                transactionToken = await paymentService.ProcessPaymentByCustomerId(0, paymentMethod.Details);
            }
            else
            {
                if (request.User.PaymentMethods == null || !request.User.PaymentMethods.Any())
                {
                    throw new BadRequestException("PaymentMethod", "Payment method expected.");
                }

                var paymentMethodFromRequest = request.User.PaymentMethods.First();

                var anonymousUser = await db.Users.FirstOrDefaultAsync(x => x.Email == "ANONYMOUS_USER");

                if (anonymousUser == null)
                {
                    anonymousUser = new Model.User
                    {
                        Email        = "ANONYMOUS_USER",
                        Organization = client.Organization
                    };
                }

                paymentMethod = new Model.PaymentMethod
                {
                    Type = paymentMethodFromRequest.Type,
                    User = anonymousUser
                };

                db.PaymentMethods.Add(paymentMethod);

                transactionToken = await paymentService.ProcessPaymentByToken(0, paymentMethod.Details);
            }

            if (transactionToken == "")
            {
                throw new BadRequestException("Payment", "Unable to process payment");
            }

            var transaction = new Transaction
            {
                Total            = 0,
                TransactionToken = transactionToken
            };

            await db.SaveChangesAsync();

            return(StatusCode(200));
        }