static void Main()
        {
            Log.Logger = new LoggerConfiguration()
                         .WriteTo.File(logPath)
                         .CreateLogger();
            Log.Information("Program started");

            try
            {
                // Call the Orders API to get orders that are in 'Awaiting Fulfillment' status
                JArray ordersAwaitingFulfillment = BigCommerceController.GetOrdersAwaitingFulfillment();

                if (ordersAwaitingFulfillment.Count() == 0)
                {
                    Log.Information("No orders to import");
                    return;
                }

                ImportOrdersToNetSuite(ordersAwaitingFulfillment);

                if (ordersMissingProId.Count > 0)
                {
                    AlertB2BTeam();
                }
            }
            catch (Exception ex)
            {
                Log.Error($"Error: {ex}");
                string      title        = "Error in NestProOrderImporter";
                string      text         = $"Error message: {ex.Message}";
                string      color        = "red";
                TeamsHelper teamsMessage = new TeamsHelper(title, text, color, errorLogsUrl);
                teamsMessage.LogToMicrosoftTeams(teamsMessage);
            }
        }
        public static string GetNestProId()
        {
            RestClient  client  = new RestClient($@"https://api.bigcommerce.com/stores/v68kp5ifsa/v2/customers/{customerId}");
            RestRequest request = BigCommerceHelper.CreateNewGetRequest();

            IRestResponse       customerApiResponse = client.Execute(request);
            BigCommerceCustomer parsedCustomer      = JsonConvert.DeserializeObject <BigCommerceCustomer>(customerApiResponse.Content);
            string nestProId = "";

            if (parsedCustomer.form_fields == null)
            {
                string      errorMessage = $"No Nest Pro Id found for Big Commerce customer {customerId}";
                string      title        = "Error in ImportOrdersToNetSuite";
                string      color        = "red";
                TeamsHelper teamsMessage = new TeamsHelper(title, errorMessage, color, Program.errorLogsUrl);
                teamsMessage.LogToMicrosoftTeams(teamsMessage);
            }
            else
            {
                foreach (var formField in parsedCustomer.form_fields)
                {
                    if (formField.name.ToLower().Contains("nest pro id"))
                    {
                        nestProId = formField.value;
                    }
                }
            }

            return(nestProId);
        }
        private static void ImportOrdersToNetSuite(JArray ordersAwaitingFulfillment)
        {
            try
            {
                foreach (var order in ordersAwaitingFulfillment)
                {
                    Order parsedOrder = JsonConvert.DeserializeObject <Order>(order.ToString());

                    if (parsedOrder.is_deleted == true)
                    {
                        Log.Information($"Skipping order {parsedOrder.customer_id} because it is marked as deleted/archived.");
                        continue;
                    }

                    BigCommerceController.customerId = parsedOrder.customer_id;
                    int bigCommerceOrderId = parsedOrder.id;
                    Log.Information($"bigCommerceOrderId Id {bigCommerceOrderId}");

                    // Get the shipping information
                    string          shippingAddressUrl      = parsedOrder.shipping_addresses.url;
                    ShippingAddress customerShippingAddress = BigCommerceController.GetCustomerShippingAddress(shippingAddressUrl);

                    // Format the request object to send to CreateCustomerRESTlet
                    OrderToImport netsuiteRequest = NetSuiteController.CreateNetSuiteRequest(parsedOrder, customerShippingAddress);

                    if (netsuiteRequest.NestProId == "")
                    {
                        // We alert these to B2B so they can contact the customer
                        ordersMissingProId.Add(bigCommerceOrderId);
                        continue;
                    }

                    netsuiteCustomerId         = NetSuiteController.GetNetSuiteCustomerId(netsuiteRequest);
                    netsuiteRequest.CustomerId = Convert.ToInt32(netsuiteCustomerId);

                    // Call the Products API to get the products on the order
                    string productsUrl = parsedOrder.products.url;
                    netsuiteRequest.Items = BigCommerceController.GetProductsOnOrder(productsUrl);

                    NetSuiteController.SetNetSuiteItemIdAndPersonalItemFlag(netsuiteRequest);

                    // Import order to Netsuite
                    string netsuiteOrderId = NetSuiteController.ImportOrderToNetSuite(netsuiteRequest);

                    // Set the Big Commerce status to 'awaiting shipment' and add the NetSuite order ID to 'staff notes'
                    BigCommerceController.SetOrderStatus(bigCommerceOrderId, netsuiteOrderId);
                }
            }
            catch (Exception ex)
            {
                Log.Error($"Error: {ex}");
                string      title        = "Error in ImportOrdersToNetSuite";
                string      text         = $"Error message: {ex.Message}";
                string      color        = "red";
                TeamsHelper teamsMessage = new TeamsHelper(title, text, color, errorLogsUrl);
                teamsMessage.LogToMicrosoftTeams(teamsMessage);
            }
        }
Beispiel #4
0
        void UpdateSpells(double dt)
        {
            var toRemove = new List <LinearSpell>();

            ActiveSpells.ForEach(s =>
            {
                Vec2 before = (Vec2)s.Position.Clone();
                Match.CurrentState.ApplyPhysicsUpdate(s.ID, (float)dt);
                Vec2 pass = (s.Position - before) / PhysicsEngine.PHYSICS_PASSES;

                s.Position = before;
                for (int i = 0; i < PhysicsEngine.PHYSICS_PASSES; ++i)
                {
                    // Check for entities collisions
                    var rect      = s.CreateCollisionRectangle();
                    var enemyTeam = TeamsHelper.Opposite(s.Team);

                    // Check to hit players
                    bool remove = CheckForSpellPlayerCollisions(s, rect, enemyTeam);

                    // Check to hit structures
                    if (!remove)
                    {
                        remove = CheckForSpellStructuresCollisions(s, rect,
                                                                   enemyTeam == Teams.Left ? Match.LeftStructures : Match.RightStructures);
                    }

                    // Check to remove spells
                    if (!remove &&                     // don't check if we know it already has to be removed
                        Match.CurrentState.SpellShouldDisappear(s))
                    {
                        remove = true;
                    }

                    // The spell has to be removed
                    if (remove)
                    {
                        toRemove.Add(s);
                        break;
                    }
                    s.Position += pass;
                }
            });

            toRemove.ForEach(s =>
            {
                ActiveSpells.Remove(s);
                RemarkableEvents.Add(Utilities.MakePair <ServerCommand, Action <NetBuffer> >(
                                         ServerCommand.SpellDisappear,
                                         (msg) =>
                {
                    ulong id = s.ID;
                    msg.Write(id);
                }));
            });
        }
        private static void AlertB2BTeam()
        {
            var ordersMissingProIdJSON = JsonConvert.SerializeObject(ordersMissingProId);
            var warningMessage         = $"The following orders cannot import because the customer is missing a Nest Pro ID: {ordersMissingProIdJSON}";

            Log.Warning(warningMessage);

            string      title        = "Error Importing Nest Pro Orders";
            string      text         = warningMessage;
            string      color        = "red";
            TeamsHelper teamsMessage = new TeamsHelper(title, text, color, nestTeamUrl);

            teamsMessage.LogToMicrosoftTeams(teamsMessage);
        }
        public TeamsUserControl()
        {
            InitializeComponent();

            using (var db = new PodaciContext())
            {
                Teams.Teams = new ObservableCollection <TeamsHelper>();

                foreach (var team in db.Teams
                         .Include(x => x.CleanerTeams)
                         .ThenInclude(x => x.Cleaner))
                {
                    var th = new TeamsHelper {
                        Team = team, Name = team.Name, Color = team.Color
                    };

                    if (team.CleanerTeams?.Count > 0)
                    {
                        th.CleanerId = team.CleanerTeams[0].CleanerId;
                    }
                    if (team.CleanerTeams?.Count > 1)
                    {
                        th.Cleaner2Id = team.CleanerTeams[1].CleanerId;
                    }
                    if (team.CleanerTeams?.Count > 2)
                    {
                        th.Cleaner3Id = team.CleanerTeams[2].CleanerId;
                    }
                    if (team.CleanerTeams?.Count > 3)
                    {
                        th.Cleaner4Id = team.CleanerTeams[3].CleanerId;
                    }
                    if (team.CleanerTeams?.Count > 4)
                    {
                        th.Cleaner5Id = team.CleanerTeams[4].CleanerId;
                    }
                    if (team.CleanerTeams?.Count > 5)
                    {
                        th.Cleaner6Id = team.CleanerTeams[5].CleanerId;
                    }

                    Teams.Teams.Add(th);
                }

                dataGrid.ItemsSource = Teams.Teams;
            }
        }
        static void Main()
        {
            Log.Logger = new LoggerConfiguration()
                         .WriteTo.File(logPath)
                         .CreateLogger();
            Log.Information("Program started");

            try
            {
                // Pull orders in 'Awaiting Shipment' and 'Partially Shipped' status
                JArray ordersAwaitingShipment = BigCommerceController.GetOrdersByStatus(awaitingShipmentStatusId);
                JArray partiallyShippedOrders = BigCommerceController.GetOrdersByStatus(partiallyShippedStatusId);

                // Merge the two JArray's
                JArray allOrdersAwaitingShipments = MergeJArrays(ordersAwaitingShipment, partiallyShippedOrders);

                // Create shipments in Big Commerce if any new item fulfillments are found in NetSuite
                if (allOrdersAwaitingShipments.Count() == 0)
                {
                    Log.Information("No shipments to import");
                    return;
                }

                ImportShipmentsToBigCommerce(allOrdersAwaitingShipments);

                return;
            }
            catch (Exception ex)
            {
                Log.Error("Error: {@ex}", ex);
                string      title        = "Error in NestProShipments";
                string      text         = $"Error message: {ex.Message}";
                string      color        = "red";
                TeamsHelper teamsMessage = new TeamsHelper(title, text, color, teamsUrl);
                teamsMessage.LogToMicrosoftTeams(teamsMessage);
            }
        }
Beispiel #8
0
        public async Task SignUpAsync_ValidTeam_SignsUp()
        {
            //Arrange
            var sut = CreateSut();

            var newTeam = new Team()
            {
                CreatedAt    = DateTime.Now,
                Name         = "Sign Up Test Team",
                Participants = new List <Participant>
                {
                    new Participant
                    {
                        Forename  = "John",
                        Surname   = "Doe",
                        Email     = "*****@*****.**",
                        CreatedAt = DateTime.Now,
                        Token     = new Token
                        {
                            Value     = "342345hjk34hgtkj34h5kjh345",
                            CreatedAt = DateTime.Now,
                            IsValid   = true,
                        }
                    },
                    new Participant
                    {
                        Forename  = "Mary",
                        Surname   = "Doe",
                        Email     = "*****@*****.**",
                        CreatedAt = DateTime.Now,
                        Token     = new Token
                        {
                            Value     = "lfkasdlfhjlkasdhf87",
                            CreatedAt = DateTime.Now,
                            IsValid   = true,
                        }
                    }
                }
            };

            //Act
            await sut.SignUpAsync(newTeam);

            //Assert
            var teams = await TeamsHelper.GetTeamsAsync();

            var team = teams.FirstOrDefault(t => t.Name == newTeam.Name);

            Assert.IsNotNull(team);

            Assert.AreEqual(newTeam.Name, team.Name);
            Assert.AreEqual(newTeam.CreatedAt.ToString(), team.CreatedAt.ToString());

            var participants = await ParticipantsHelper.GetParticipantsInTeamAsync(team.Id);

            var participant = newTeam.Participants[0];

            var john = participants.First(p => p.Forename == participant.Forename);

            Assert.IsNotNull(john);
            Assert.AreEqual(participant.Surname, john.Surname);
            Assert.AreEqual(participant.Email, john.Email);
            Assert.AreEqual(participant.CreatedAt.ToString(), john.CreatedAt.ToString());
            Assert.AreEqual(participant.TeamId, team.Id);

            var johnsToken = await TokensHelper.GetTokenForParticipantAsync(john.Id);

            Assert.AreEqual(participant.Token.Value, johnsToken.Value);
            Assert.AreEqual(participant.Token.CreatedAt.ToString(), participant.Token.CreatedAt.ToString());
            Assert.AreEqual(participant.Token.IsValid, participant.Token.IsValid);
            Assert.AreEqual(participant.Token.TeamId, team.Id);

            participant = newTeam.Participants[1];

            var mary = participants.First(p => p.Forename == participant.Forename);

            Assert.IsNotNull(mary);
            Assert.AreEqual(participant.Surname, mary.Surname);
            Assert.AreEqual(participant.Email, mary.Email);
            Assert.AreEqual(participant.CreatedAt.ToString(), mary.CreatedAt.ToString());
            Assert.AreEqual(participant.TeamId, team.Id);

            var marysToken = await TokensHelper.GetTokenForParticipantAsync(mary.Id);

            Assert.AreEqual(participant.Token.Value, marysToken.Value);
            Assert.AreEqual(participant.Token.CreatedAt.ToString(), participant.Token.CreatedAt.ToString());
            Assert.AreEqual(participant.Token.IsValid, participant.Token.IsValid);
            Assert.AreEqual(participant.Token.TeamId, team.Id);
        }
Beispiel #9
0
        void UpdateStructures(double dt)
        {
            Match.Structures.ForEach(s => {
                s.Update(TimeSpan.FromSeconds(dt));

                if (s.GetHealthChangedAndClearFlag())                   // the health of the structure changed
                {
                    Console.WriteLine(s.Team + " " + s.Type + " - " + s.Health + " / " + s.MaxHealth);
                    AddRemarkableEvent(ServerCommand.StructureStatsChanged,
                                       (msg) => {
                        bool left    = s.Team == Teams.Left;
                        byte type    = (byte)s.Type;
                        float health = s.Health;
                        msg.Write(left);
                        msg.Write(type);
                        msg.Write(health);
                    });

                    if (!s.Alive)                       // the structure is destroyed
                    {
                        AddRemarkableEvent(ServerCommand.StructureDestroyed,
                                           (msg) => {
                            bool left = s.Team == Teams.Left;
                            byte type = (byte)s.Type;
                            msg.Write(left);
                            msg.Write(type);
                        });

                        if (s.Type == StructureTypes.Base)
                        {
                            AddRemarkableEvent(ServerCommand.EndOfGame,
                                               (msg) => {
                                bool winnerIsLeft = TeamsHelper.Opposite(s.Team) == Teams.Left;
                                msg.Write(winnerIsLeft);
                            });

                            Timer t    = new Timer(3000);
                            t.Elapsed += (sender, e) => Server.Exit = true;
                            t.Start();
                        }
                    }
                }

                // Check to hit entities
                if (StructureHelper.IsTower(s.Type) &&
                    s.Alive)
                {
                    Tower t          = (Tower)s;
                    float now        = (float)Server.Instance.GetTime().TotalSeconds;
                    Vec2 towerCenter = t.SpellSpawnPosition;
                    foreach (ServerClient client in Clients.Values)
                    {
                        var clientRect    = client.Champion.CreateCollisionRectangle();
                        Vec2 clientCenter = Rect.Center(clientRect);
                        if (t.CanPrepare(now) &&                                       // not on cooldown
                            s.Team == TeamsHelper.Opposite(client.Champion.Team) &&    // is enemy
                            client.ChampStats.Alive &&                                 // is alive
                            Utilities.InRange(towerCenter, clientCenter, Tower.RANGE)) // in range

                        {
                            if (!t.IsPreparing())
                            {
                                t.StartPreparation();
                                PrepareTower(s.Team, s.Type);
                            }
                            else if (t.CanShoot(now))
                            {
                                CastTowerSpell(s.Team, towerCenter, clientCenter);
                                t.OnShot(now);
                            }
                        }
                    }
                }
            });
        }
        public static void ImportShipmentsToBigCommerce(JArray allOrdersAwaitingShipments)
        {
            try
            {
                foreach (var order in allOrdersAwaitingShipments)
                {
                    Order parsedOrder = JsonConvert.DeserializeObject <Order>(order.ToString());
                    BigCommerceController.bigCommerceOrderId = parsedOrder.id;
                    Log.Information($"Big Commerce Order Id: {BigCommerceController.bigCommerceOrderId}");

                    // Query NetSuite to get any matching item fulfillments
                    string netsuiteSalesOrderId = parsedOrder.staff_notes;

                    /* Get a list of NetSuite item fulfillment ids (partially shipped orders only) that already exist
                     *  in Big Commerce to exclude so we do not create duplicate shipments.
                     */
                    List <string> importedItemFulfillmentIds = new List <string>();
                    if (parsedOrder.status.ToLower() == "partially shipped")
                    {
                        importedItemFulfillmentIds = BigCommerceController.GetImportedItemFulfillments();
                    }

                    var itemFulfillmentGroupsToImport = NetSuiteController.GetItemFulfillmentsNotImported(netsuiteSalesOrderId, importedItemFulfillmentIds);

                    // Skip line if no item fulfillments are found
                    if (itemFulfillmentGroupsToImport.Count() == 0)
                    {
                        Log.Information($"No item fulfillments to import.");
                        continue;
                    }

                    // Send each item fulfillment group to Big Commerce as a Shipment
                    foreach (var itemFulfillmentGroupToImport in itemFulfillmentGroupsToImport)
                    {
                        Log.Information($"Itfil ID: {itemFulfillmentGroupToImport.Key}");

                        BigCommerceController.currentItemFulfillment = itemFulfillmentGroupToImport;

                        Shipment shipmentToCreate = BigCommerceController.CreateShipmentRequest(itemFulfillmentGroupToImport);

                        // Big Commerce will throw exception if shipment does not have a tracking number
                        if (shipmentToCreate.TrackingNumber == "")
                        {
                            Log.Warning($"No tracking numbers found. Shipment not created.");
                            continue;
                        }

                        // Create the Shipment in Big Commerce
                        try
                        {
                            Shipment shipmentCreated = BigCommerceController.PostShipmentToBigCommerce(shipmentToCreate);
                            Log.Information($"shipment id {shipmentCreated.ShipmentId} created.");
                        }
                        catch (Exception ex)
                        {
                            string errorMessage = $"Error Posting Shipment To Big Commerce. Error: {ex}";
                            Log.Error(errorMessage);
                            string      title        = "Error in NestProShipments PostShipmentToBigCommerce";
                            string      text         = errorMessage;
                            string      color        = "yellow";
                            TeamsHelper teamsMessage = new TeamsHelper(title, text, color, Program.teamsUrl);
                            teamsMessage.LogToMicrosoftTeams(teamsMessage);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string errorMessage = $"Error in ImportShipmentsToBigCommerce. Error: {ex}";
                Log.Error(errorMessage);
                string      title        = "Error in NestProShipments ImportShipmentsToBigCommerce";
                string      text         = errorMessage;
                string      color        = "red";
                TeamsHelper teamsMessage = new TeamsHelper(title, text, color, Program.teamsUrl);
                teamsMessage.LogToMicrosoftTeams(teamsMessage);
            }
        }